You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Polly为重试策略筛选特定端点,禁用指定API重试

针对特定API禁用HttpClient重试策略的解决方案

要给MyServiceHttpClient发起的特定API请求禁用重试,核心就是在原有策略配置里加个条件判断:当请求命中目标API时,返回无操作策略(NoOpPolicy),否则继续使用原来的重试规则。

具体实现步骤

  1. 确定目标API的判断规则
    先明确你要禁用重试的API特征,比如:

    • 请求路径包含/api/skip-retry
    • 请求方法是POST且路径为/api/submit-data
      你可以根据实际业务场景灵活调整判断逻辑。
  2. 修改HttpClient配置代码
    在AddPolicyHandler的委托中,增加请求判断逻辑,返回对应的策略:

services.AddHttpClient<MyServiceHttpClient>(client =>
{
    /* 原有配置 */
})
.AddPolicyHandler((serviceProvider, request) => 
{
    // 判断当前请求是否是需要禁用重试的API
    bool shouldSkipRetry = request.RequestUri.AbsolutePath.Contains("/api/skip-retry");
    
    if (shouldSkipRetry)
    {
        // 返回无操作策略,不执行重试
        return Policy.NoOpAsyncPolicy<HttpResponseMessage>();
    }
    
    // 非目标API,沿用原有重试策略
    return HttpPolicyExtensions.HandleTransientHttpError()
        .WaitAndRetryAsync(3, 
            sleepDurationProvider: retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), 
            onRetry: (outcome, timespan, retryAttempt, context) =>
            {
                serviceProvider.GetService<ILogger<MyServiceHttpClient>>()
                    .LogWarning("延迟 {delay}ms 后执行第 {retry} 次重试。", timespan.TotalMilliseconds, retryAttempt);
            });
});

关键说明

  • Policy.NoOpAsyncPolicy<HttpResponseMessage>():这个策略不会对请求做任何额外处理,直接返回请求结果,相当于禁用了重试。
  • 判断逻辑可以灵活调整:比如根据request.Method判断请求方法,或者request.RequestUri的完整路径精准匹配,完全贴合你的业务需求。

内容的提问来源于stack exchange,提问作者Rafael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:55:12