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

Why does HttpResponseException only allow its message to be read async?

我正在编写一个单元测试方法来执行代码,在我的测试条件下,预计会抛出带有特定响应消息的 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 class 仅提供对其消息的异步访问。因此,我需要通过 ReadAsStringAsync() 获取消息,而不仅仅是通过 ex.Response.Content.Message.

之类的操作来同步获取消息

我觉得我可能遗漏了一些有关 HttpResponseException class 为何如此工作的信息。 HttpResponseException 不提供对其响应消息的同步访问的原因是什么?

The HttpResponseException class only provides async access to its message.

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

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