为什么HttpResponseException只允许其消息被读取为异步?

时间:2017-08-16 16:26:41

标签: c# system.web

我正在编写一个单元测试方法来运行代码,在我的测试条件下,预计会抛出带有特定响应消息的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不提供对其响应消息的同步访问的原因是什么?

1 个答案:

答案 0 :(得分:4)

  

HttpResponseException类仅提供对其消息的异步访问。

HttpResponseException为您提供对HTTP响应消息(Response)的同步访问,该消息为您提供对其内容(Content)的同步访问。 HTTP流的内容始终是异步读取的。在某些用途中,HTTP流的内容在其使用时完全存在于内存中;在其他用途​​中,HTTP流的内容通过网络流式传输。

例如,如果您使用HttpCompletionOption.ResponseHeadersRead发出HTTP请求,那么响应内容将被流式传输,并且可以检查状态代码并引发异常,然后响应的内容实际到达您的框中代码正在运行。

相关问题