2017-08-16 46 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流的內容總是被異步讀取」 - 這是我的關鍵點。謝謝! :-) –