簡體   English   中英

如何使用 HttpClient 捕獲/處理 WebException 和 SocketException

[英]How to catch/handle WebException and SocketException with HttpClient

我的問題是:例如,如果目標服務器離線,不可用

調用任何 HttpClient 異步方法時,如 PostAsync、GetAsync、SendAsync; 它不會拋出任何異常,但執行會跳出執行方法。 Visual Studio(當我調試時)會拋出異常

WebException: Unable to connect to the remote server SocketException: No connection could be made because the target machine主動拒絕...

問題:如何使用 HttpClient 處理這種情況? 抓住那個 WebException 和 SocketException?

以下是示例代碼:

async void DoApiFoo()
{
  try
  {
     var r = new HttpRequestMessage(HttpMethod.Post, url);
     r.Content = content;
     // if server if offline, execution will step over DoApiFoo and go back to CallFoo 
     var response = await httpClient.SendAsync(r, HttpCompletionOption.ResponseHeadersRead);

      // this line will not hit
      response.EnsureSuccessStatusCode();
   }
   catch (Exception)
    {
      // no exception thrown
       throw;
    }

}

async void CallFoo()
{
  var result = await DoApiFoo();
  
}

您的catch塊將在SendAsync方法和調用EnsireSuccessStatusCode期間捕獲任何異常。 由於在 catch 塊中有一個throw語句,Visual Studio 將顯示觸發異常的外部調用。 如果您使用調試器運行代碼並在throw行上設置斷點,您將看到調試器成功地在該行中斷。

我假設您在問題中包含的代碼僅是為該問題編寫的。 它缺少變量,通常無法編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM