.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
相关产品推荐
相关产品推荐

