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

C#生成Swagger时部分API报Failed to fetch问题求助

解决Chrome Swagger中Api/V1/Promotion/VIP接口报错的问题

根据你描述的现象和代码,我判断这个问题大概率是Chrome客户端拦截器误拦截+控制器方法重载导致Swagger文档歧义的双重因素造成的,下面给出具体的排查和修复步骤:

1. 优先排查Chrome的广告/隐私拦截器

net::ERR_BLOCKED_BY_CLIENT这个错误几乎都是浏览器插件(比如AdBlock、uBlock Origin、隐私Badger这类)拦截了请求导致的。很多拦截规则会自动拦截包含VIP、Premium这类和付费会员相关的关键词的URL,Swagger的请求刚好触发了这个规则。

你可以按以下步骤验证:

  • 暂时禁用Chrome里所有的广告拦截/隐私保护插件,然后刷新Swagger页面测试这个接口。
  • 如果测试有效,把你的Swagger访问域名(比如localhost:xxxx或者正式域名)添加到拦截器的白名单中,避免后续再被拦截。

2. 修复控制器的方法重载问题

看你的代码,控制器里有两个同名的Get方法,虽然路由不同(一个是api/v1/Promotion,一个是api/v1/Promotion/VIP),但Swagger的文档生成器对这种同名重载的识别容易出问题,可能导致接口文档生成异常,进一步加剧了Chrome拦截后的报错表现。

另外注意:你的Lambda表达式漏写了箭头,Where(x.IsActive)应该改为Where(x => x.IsActive),这个会导致运行时错误,记得一起修正。

你可以通过以下两种方式修复方法重载问题:

方式一:给方法重命名(推荐)

直接修改第二个Get方法的名称,让它和第一个方法区分开,Swagger就能正确识别两个不同的接口:

[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/Promotion")]
public class PromotionV1Controller : Controller
{
    private myDbContext _DbContext;
    public PromotionV1Controller(myDbContext dbContext)
    {
        _DbContext= dbContext;
    }

    // GET api/Promotion
    /// <summary>
    /// Get list of Promotion
    /// </summary>
    [HttpGet]
    [AllowAnonymous]
    public IEnumerable<Promotion> GetPromotions()
    {
        return _DbContext.Promotions.AsNoTracking().Where(x => x.IsActive);
    }

    // GET api/Promotion/VIP
    /// <summary>
    /// Get list of VIP Promotion
    /// </summary>
    [HttpGet, Route("VIP")]
    [AllowAnonymous]
    public IEnumerable<Promotion> GetVIPPromotions()
    {
        return _DbContext.Promotions.AsNoTracking().Where(x => x.IsActive && x.Type == AdsType.VIP);
    }
}

方式二:使用[ActionName]属性

如果你不想修改方法名,可以给第二个方法添加[ActionName]属性,明确告诉Swagger它的标识:

// GET api/Promotion/VIP
/// <summary>
/// Get list of VIP Promotion
/// </summary>
[HttpGet, Route("VIP")]
[AllowAnonymous]
[ActionName("GetVIPPromotions")]
public IEnumerable<Promotion> Get()
{
    return _DbContext.Promotions.AsNoTracking().Where(x => x.IsActive && x.Type == AdsType.VIP);
}

总结

先排查Chrome的拦截器问题,这是导致你看到ERR_BLOCKED_BY_CLIENT的直接原因;再修复控制器方法的重载和Lambda表达式错误,确保Swagger能正确生成接口文档。两个步骤结合起来,应该就能解决这个仅在Chrome Swagger中出现的异常了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:51:05