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

3

我正在编写一个单元测试方法,对在我的测试条件下预计会抛出具有特定响应消息的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个回答

4

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

HttpResponseException类提供您同步访问HTTP响应消息(Response),这使您可以同步访问其内容(Content)。HTTP流的内容总是异步读取的。在某些用途中,HTTP流的内容完全存在于内存中,直到使用它的时候; 在其他用途中,HTTP流的内容通过网络流传输。

例如,如果您使用HttpCompletionOption.ResponseHeadersRead发出HTTP请求,则响应内容将被流式传输,并且在实际到达代码所运行的计算机之前,就有可能检查状态代码并引发异常。


“HTTP 流的内容总是异步读取”——这对我来说是关键点。谢谢! :-) - Jon Schneider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接