簡體   English   中英

如何處理 flurl 中的錯誤請求異常

[英]how to handle bad request exception in flurl

我是 Flurl 的新手。我正在嘗試調用 api,我故意在參數中傳遞了無效的 apikey,然后 api 失敗,說“禁止”並顯示錯誤代碼 403。我如何在異常中處理它?

 public async Task<myResponse> MyService(myRequest request)
    {
        try
        {


            return await new Flurl.Url("https://myapi.com/rest/age?apikey=XXXXXXXX").PostJsonAsync(apirequest).ReceiveJson<myResponse>();
        }
        catch (FlurlHttpException ex)
        {
            var statusCode = await ex.GetResponseJsonAsync<myResponse>();
            return await ex.GetResponseJsonAsync<myResponse>();

        }

如果我得到狀態代碼 403,我想拋出我自己的自定義異常,但目前它在線var statusCode = await ex.GetResponseJsonAsync<myResponse>(); }

如果我得到狀態代碼 403,我想拋出我自己的自定義異常

有 2 種方法可以做到這一點。 第一個是簡單地從 catch 塊重新拋出( catch / when在這里很方便):

try
{
    ...
}
catch (FlurlHttpException ex) when (ex.Call.HttpStatus == HttpStatusCode.Forbidden)
{
    throw new MyException(...);
}

第二種方法是使用AllowHttpStatus防止 Flurl 拋出:

var resp = await "https://myapi.com/rest/age?apikey=XXXXXXXX"
    .AllowHttpStatus("4xx")
    .PostJsonAsync(apirequest);

if (resp.StatusCode == HttpStatusCode.Forbidden)
{
    throw new MyException(...);
}

第二種方法的一個警告是,您需要自己反序列化一個“原始” HttpResponseMessage ,因為 Flurl 的ReceiveJson鏈接了Task<HttpResponseMessage> ,而您已經等待了該Task 但是自己反序列化它並不難,有計划的增強功能將在不久的將來解決這個問題,或者您可以隨時使用這個 hacky 小變通方法:

await Task.FromResult(resp).ReceiveJson<myResponse>();

老實說,我可能會采用第一種方法。 FlurlHttpException有一些方便的方法,比如GetResponseJsonAsync<T> ,如果它是 JSON,它允許你反序列化錯誤主體,或者如果你只需要原始字符串,則GetResponseStringAsync允許你反序列化。

暫無
暫無

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

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