我正在使用此测试方法(和帮助程序类)来验证来自外部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;
}
}
。
答案 0 :(得分:2)
当此操作成功时(通过浏览器),您需要加载Fiddler并记录HTTP流量。
然后,加载你的代码,站起来Fiddler的另一个实例(或窗口),并对你的代码做同样的事情。现在,比较两个Fiddler窗口,看看有什么不同。
你只需要比较Fiddler中用蓝色突出显示的那些东西。您可以忽略其他通信。