我正在编写一个单元测试方法来运行代码,在我的测试条件下,预计会抛出带有特定响应消息的HttpResponseException。
我的测试方法代码的相关部分如下所示:
try
{
MyClassBeingTested.MyWebServiceMethodBeingTested(myParameters);
}
catch (HttpResponseException ex)
{
string errorMessage = await ex.Response.Content.ReadAsStringAsync();
Assert.IsTrue(errorMessage.Contains("My expected error message string"));
return;
}
Assert.Fail("Expected HttpResponseException didn't get thrown");
此代码有效,测试通过。
但是,我想更好地理解为什么我的代码读取错误消息需要以这种方式构造。 HttpResponseException类仅提供对其消息的异步访问。因此,我需要通过ReadAsStringAsync()
获取消息,而不是通过执行ex.Response.Content.Message
之类的操作来同步获取消息。
我觉得我可能会错过HttpResponseException类为何如此工作的原因。 HttpResponseException不提供对其响应消息的同步访问的原因是什么?
答案 0 :(得分:4)
HttpResponseException类仅提供对其消息的异步访问。
HttpResponseException
为您提供对HTTP响应消息(Response
)的同步访问,该消息为您提供对其内容(Content
)的同步访问。 HTTP流的内容始终是异步读取的。在某些用途中,HTTP流的内容在其使用时完全存在于内存中;在其他用途中,HTTP流的内容通过网络流式传输。
例如,如果您使用HttpCompletionOption.ResponseHeadersRead
发出HTTP请求,那么响应内容将被流式传输,并且可以检查状态代码并引发异常,然后响应的内容实际到达您的框中代码正在运行。