无法使用System.Net.Http.HttpClient从REST Web服务获得有效响应

时间:2017-10-30 20:02:13

标签: c# rest httpclient

我正在使用此测试方法(和帮助程序类)来验证来自外部Web服务的响应:

Player           | PTS | REB | AST | etc....
Paul George      | 20  |  5  |  0  | etc....
Carmelo Anthony  | 21  |  5  |  2  | etc....

我无法通过此测试;我总是得到[TestMethod] public void WebServiceReturnsSuccessResponse() { using (var provider = new Provider(new Info())) using (var result = provider.GetHttpResponseMessage()) { Assert.IsTrue(result.IsSuccessStatusCode); } } private class Info : IInfo { public string URL { get; set; } = "https://notreallythe.website.com:99/service/"; public string User { get; set; } = "somename"; public string Password { get; set; } = "password1"; } 结果。我通过外部实用程序(Postman)连接 - 所以Web服务已启动,我可以连接到url&我拥有的凭证。

我认为问题出在我的HttpClient类的实例化中,但我无法确定在哪里。我正在使用基本身份验证:

500 - Internal Server Error

我回来的反应似乎转到了正确的终点;响应中的RequestUri看起来与我期望的完全一样,public class Provider : IProvider, IDisposable { private readonly HttpClient _httpClient; public Provider(IInfo config){ if (config == null) throw new ArgumentNullException(nameof(config)); var userInfo = new UTF8Encoding().GetBytes($"{config.User}:{config.Password}"); _httpClient = new HttpClient { BaseAddress = new Uri(config.URL), DefaultRequestHeaders = { Accept = { new MediaTypeWithQualityHeaderValue("application/xml")}, Authorization = new AuthenticationHeaderValue( "Basic", Convert.ToBase64String(userInfo)), ExpectContinue = false, }, }; } public HttpResponseMessage GetHttpResponseMessage() { return _httpClient.GetAsync("1234").Result; } }

1 个答案:

答案 0 :(得分:2)

当此操作成功时(通过浏览器),您需要加载Fiddler并记录HTTP流量。

然后,加载你的代码,站起来Fiddler的另一个实例(或窗口),并对你的代码做同样的事情。现在,比较两个Fiddler窗口,看看有什么不同。

你只需要比较Fiddler中用蓝色突出显示的那些东西。您可以忽略其他通信。