2017-08-16 47 views
2

我正在编写一个单元测试方法,该方法在我测试的条件下练习的代码应该会引发一个带有特定响应消息的HttpResponseException。为什么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不提供对其响应消息的同步访问的原因是什么?

回答

3

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

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

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

+0

“HTTP流的内容总是被异步读取” - 这是我的关键点。谢谢! :-) –