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

.NET 6 Asp Core中Swagger路由覆盖冲突的解决方法

解决.NET 6中Swagger路由冲突问题

方案1:配置冲突解析器保留生效的Action

在Swagger生成器配置中添加自定义冲突解析逻辑,只保留Order值最小的Action(实际运行时仅该Action会被触发)。修改Program.cs中的Swagger配置代码:

builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
    
    c.ResolveConflictingActions(apiDescriptions =>
    {
        // 按Order升序排序,取优先级最高的Action
        return apiDescriptions.OrderBy(d =>
        {
            if (d.ActionDescriptor.EndpointMetadata.FirstOrDefault(m => m is HttpMethodAttribute) is HttpMethodAttribute methodAttr)
            {
                return methodAttr.Order;
            }
            return int.MaxValue;
        }).First();
    });
});

方案2:忽略不生效的Action

给不会被实际命中的Action添加[ApiExplorerSettings(IgnoreApi = true)]特性,让Swagger跳过该Action的文档生成:

[ApiController]
[Route("/api")]
public class MyFallbackController : ControllerBase
{
    [HttpGet("values", Order = 1)]
    [ApiExplorerSettings(IgnoreApi = true)]
    public ActionResult<object> GetValues()
    {
        return new[] { 1, 2, 3 };
    }
}

方案3:调整路由避免冲突(备选)

若业务场景允许,可修改其中一个Action的路由模板,确保路径与方法组合唯一:

// 示例:给备用Action添加额外路由标识
[HttpGet("values/fallback", Order = 1)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:01:05