[英]How to catch 404 WebException for WebClient.DownloadFileAsync
[英]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.