c# - Polly - 从 HTTP 响应内容评估瞬时故障的策略处理程序
问题描述
我在 ASP.NET Core Web API 中使用 Refit、Polly 和 Polly.Extensions.Http 来调用一些外部 API。
我正在尝试使用 Polly 添加一个策略处理程序,它可以根据正文内容重试,因为我正在使用的外部 API,不使用 HTTP 状态代码返回操作结果,而是将操作结果放在一个公共返回的正文中目的。所以它总是会返回 200 OK 但它可能表明它失败了一个有Success
=false
和属性中的一些错误的主体Errors
。以下是始终返回的响应对象属性:
public abstract class ApiResultResponse
{
public string RequestId { get; set; }
public List<string> Warnings { get; set; }
public List<Error> Errors { get; set; }
public bool Success { get; set; }
}
尝试使用AddPolicyHandler
方法调用在此处添加异步重试策略。
但我不确定如何使用 Polly 正确创建 retryPolicy 对象,该对象将创建所需的功能。
services.AddRefitClient<ISomeApi>(refitSettings)
.ConfigureHttpClient(c => {
c.BaseAddress = someApiBaseUrl;
})
.AddPolicyHandler(retryPolicy)
我想将此功能添加到一堆 API,因为一个常见的情况是调用这些 API 可能会导致速率限制失败,但我需要评估ApiResultResponse
对象Errors
属性以确定原因是否是失败的速率限制。我想在全局级别处理这些并自动重试,而不是在服务中处理下游。
解决方案
推荐阅读
- php - 如果最大值只能是 30,如何组合数组中的值?
- node.js - React Native 0.57.8 但 React Native Navigation 版本是:1.1.471,但 React Native Navigation 的当前版本是:2.20.2
- javascript - 车把 如果 var 长度大于
- python-3.x - 每当我打开我的 anaconda 命令提示符时,都会出现错误消息,所以请帮助我
- javascript - 过滤基于数组的属性值
- java - 有没有办法通过 java sdk 指定训练短语中的哪些单词正在满足 Dialogflow 中的插槽
- azure-language-understanding - 我的意图与预期的反应不符
- java - BluetoothAdapter.isEnabled() 上的 Java NullPointerException
- angularjs - 从 UI-Grid onblur 获取文本框值
- c# - EF - 保存更改 - 如何修复 VIOLATION OF PRIMARY KEY 约束