我正在使用一个非常不稳定的 API。有时我得到500 Server Error
了Timeout
,其他时候我也得到500 Server Error
了,因为我给了它无法处理的输入SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
。
这两种情况都给了我HttpRequestException
,但我可以查看来自服务器的回复消息并确定异常的原因。如果是超时错误,我应该再试一次。如果输入错误,我应该重新抛出异常,因为再多的重试都无法解决错误数据的问题。
我想对 Polly 做的是在尝试重试之前检查响应消息。但是到目前为止我看到的所有样本都只包含异常类型。
到目前为止,我已经想出了这个:
HttpResponseMessage response = null;
String stringContent = null;
Policy.Handle<FlakyApiException>()
.WaitAndRetry(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)),
async (exception, timeSpan, context) =>
{
response = await client.PostAsync(requestUri, new StringContent(serialisedParameters, Encoding.UTF8, "application/json"));
stringContent = await response.Content.ReadAsStringAsync();
if (response.StatusCode == HttpStatusCode.InternalServerError && stringContent.Contains("Timeout"))
{
throw new FlakyApiException(stringContent);
}
});
有没有更好的方法来做这种检查?