如果状态码不等于 200 OK,使用 Polly 重试 api 请求
Use Polly to retry api request if the status code is not equal to 200 OK
我正在尝试使用 Polly 来处理 200 OK 以外的状态代码,以便它重试 API 请求。
但是,我很难理解如何让 Polly 吞下异常然后执行重试。这是我目前拥有的,但在语法上不正确:
var policy = Policy.HandleResult<HttpStatusCode>(r => r == HttpStatusCode.GatewayTimeout)
.Retry(5);
HttpWebResponse response;
policy.Execute(() =>
{
response = SendRequestToInitialiseApi(url);
});
在执行过程中,我还需要将响应分配给一个变量,以便在方法的其他地方使用。
响应的 return 类型是 'HttpWebResponse',例如,当我得到“504”时,它会抛出异常。
任何 help/feedback 将不胜感激。
干杯
您提供给 HandleResult
的类型必须与您要从执行中 return 提供的类型相同,在您的情况下是 HttpWebResponse
因为您想利用这个值稍后。
编辑: 我已经按照 mountain traveller
的建议添加了异常处理
var policy = Policy
// Handle any `HttpRequestException` that occurs during execution.
.Handle<HttpRequestException>()
// Also consider any response that doesn't have a 200 status code to be a failure.
.OrResult<HttpWebResponse>(r => r.StatusCode != HttpStatusCode.OK)
.Retry(5);
// Execute the request within the retry policy and return the `HttpWebResponse`.
var response = policy.Execute(() => SendRequestToInitialiseApi(url));
// Do something with the response.
我正在尝试使用 Polly 来处理 200 OK 以外的状态代码,以便它重试 API 请求。
但是,我很难理解如何让 Polly 吞下异常然后执行重试。这是我目前拥有的,但在语法上不正确:
var policy = Policy.HandleResult<HttpStatusCode>(r => r == HttpStatusCode.GatewayTimeout)
.Retry(5);
HttpWebResponse response;
policy.Execute(() =>
{
response = SendRequestToInitialiseApi(url);
});
在执行过程中,我还需要将响应分配给一个变量,以便在方法的其他地方使用。
响应的 return 类型是 'HttpWebResponse',例如,当我得到“504”时,它会抛出异常。
任何 help/feedback 将不胜感激。
干杯
您提供给 HandleResult
的类型必须与您要从执行中 return 提供的类型相同,在您的情况下是 HttpWebResponse
因为您想利用这个值稍后。
编辑: 我已经按照 mountain traveller
的建议添加了异常处理var policy = Policy
// Handle any `HttpRequestException` that occurs during execution.
.Handle<HttpRequestException>()
// Also consider any response that doesn't have a 200 status code to be a failure.
.OrResult<HttpWebResponse>(r => r.StatusCode != HttpStatusCode.OK)
.Retry(5);
// Execute the request within the retry policy and return the `HttpWebResponse`.
var response = policy.Execute(() => SendRequestToInitialiseApi(url));
// Do something with the response.