[英]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.