簡體   English   中英

http asp.net核心中的客戶端異常處理

[英]http client exception handling in asp.net core

我正在使用 .net 5 個最新的 prview..下面是 mvc 中 http 客戶端的代碼

var response = await _httpClient.SendAsync(request);
         try
        { 
            response.EnsureSuccessStatusCode();
            data = await response.Content.ReadFromJsonAsync<Abc>();
            return data;
        }
        catch (HttpRequestException ex) when (ex.StatusCode = 404)  ----how to check 404 error?
        {
            throw;
        }
        catch (HttpRequestException ex) when (ex.StatusCode == 503)
        {
            throw;
        }

如何檢查 404 錯誤或 catch.am 中的其他詳細信息低於錯誤。提前致謝...

在此處輸入圖像描述

最簡單的方法是使用適當的枚舉進行比較:

var response = await _httpClient.SendAsync(request);
try
{ 
    response.EnsureSuccessStatusCode();
    data = await response.Content.ReadFromJsonAsync<Abc>();
    return data;
}
catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.NotFound)  ----how to check 404 error?
{
    throw;
}
catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.ServiceUnavailable)
{
    throw;
}

另一種選擇是強制轉換為 (int?),但使用枚舉應該會提供更好的可讀性。

HttpRequestException.StatusCodeHttpStatusCode的類型。 您不能直接與 int 進行比較。

您可以將狀態代碼轉換為 int,例如:

try
{ 
    response.EnsureSuccessStatusCode();
    data = await response.Content.ReadFromJsonAsync<Abc>();
    return data;
}
catch (HttpRequestException ex) when (((int)ex.StatusCode) = 404)
{
    throw;
}
catch (HttpRequestException ex) when (((in)ex.StatusCode) == 503)
{
    throw;
}

或者與枚舉的值進行比較:

try
{ 
    response.EnsureSuccessStatusCode();
    data = await response.Content.ReadFromJsonAsync<Abc>();
    return data;
}
catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.NotFound)
{
    throw;
}
catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.ServiceUnavailable)
{
    throw;
}

暫無
暫無

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

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