簡體   English   中英

Blazor處理來自Web Api的響應中的錯誤

[英]Blazor handle the error in the response from Web Api

有兩個應用程序:

  1. Blazor服務器端
  2. Web API(很久以前編寫)

WebApi動作

public async Task<object> GetAllAsync(...)
{
   ...
   // Какая то проверка
   throw new Exception("Что то пошло не так");
   ...
}

客戶端應用程序中的方法的示例視圖(Blazor服務器端)

    public async Task GetAllAsync()
    {
            var httpClient = clientFactory.CreateClient();
            var responseMessage = await httpClient.GetAsync($"{address}/api/foo");

            if (responseMessage.IsSuccessStatusCode)
            {
                // successfully
            }
            else
            {
                // How to get the error message here?
            }
        }
    }

問題是:如何正確處理API中的此類錯誤?

ps

var exception = await responseMessage.Content.ReadAsAsync<HttpError>();

HttpError與.NetFramework 4.6產生依賴關系(但最初我使用.net core 3預覽)

HttpContent類未定義ReadAsAsync方法。 我認為這是一種擴展方法,已經過時,不再支持。 您可以使用ReadAsStringAsync(),ReadAsStreamAsync()等。

示例如何將異常內容序列化為字符串:

var exception = await responseMessage.Content.ReadAsStringAsync();

以下代碼段演示了如何使用HttpContent.ReadAsByteArrayAsync()作為異步操作將HTTP內容序列化為字節數組,然后將其解析為您可以定義的類型,以保存http錯誤(類似於HttpError對象) ,您不應該使用它,但是更簡單)。

var responseBytes = await responseMessage.Content.ReadAsByteArrayAsync();

注意:根據設計,將類型說明符T更改為自定義類型,或使用內置類型(例如字符串)...

JsonSerializer.Parse<T>(responseBytes, new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });

希望這可以幫助

暫無
暫無

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

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