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

ASP.NET Core 7 Web API版本化路由定义及Swagger显示问题求助

解决方案

问题1:固定路由触发UnsupportedApiVersion错误

使用固定路由[Route("api/v2/Subscription")]时,API版本化中间件无法自动识别路由中的版本标识,导致判定请求版本不被支持。解决方式:

  • 给目标控制器添加[ApiVersion("2.0")]属性,明确绑定该控制器对应的API版本;若需支持多版本,可添加多个属性,如[ApiVersion("1.0"), ApiVersion("2.0")]
  • 确保Program.cs中的ApiVersioning配置启用URL段版本读取(默认已启用,显式配置可避免歧义):
builder.Services.AddApiVersioning(options =>
{
    options.DefaultApiVersion = new ApiVersion(1, 0);
    options.AssumeDefaultVersionWhenUnspecified = true;
    options.ReportApiVersions = true;
    options.ApiVersionReader = new UrlSegmentApiVersionReader();
});

问题2:模板路由下Swagger UI显示路由不符合预期

使用[Route("api/v{version:apiVersion}/Subscription")]时,Swagger默认会保留路由中的{version}占位符,需通过文档过滤器替换为具体版本号:

  1. 在Program.cs的Swagger生成配置中,添加自定义DocumentFilter:
builder.Services.AddSwaggerGen(options =>
{
    options.SwaggerDoc("v1", new OpenApiInfo { Title = "你的API名称", Version = "v1" });
    options.SwaggerDoc("v2", new OpenApiInfo { Title = "你的API名称", Version = "v2" });

    options.DocumentFilter<ReplaceVersionPlaceholderFilter>();
});

// 实现版本占位符替换过滤器
public class ReplaceVersionPlaceholderFilter : IDocumentFilter
{
    public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
    {
        var updatedPaths = new OpenApiPaths();
        foreach (var pathEntry in swaggerDoc.Paths)
        {
            var newPath = pathEntry.Key.Replace("{version}", swaggerDoc.Info.Version);
            updatedPaths.Add(newPath, pathEntry.Value);
        }
        swaggerDoc.Paths = updatedPaths;
    }
}
  1. 确保控制器上的[ApiVersion]属性与Swagger文档版本一一对应,例如v2控制器标注[ApiVersion("2.0")]
  2. 配置Swagger UI时指定多版本入口:
app.UseSwaggerUI(options =>
{
    options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
    options.SwaggerEndpoint("/swagger/v2/swagger.json", "v2");
});

额外注意

若同时混用固定路由与模板路由,需保证每个控制器的路由规则和[ApiVersion]属性严格匹配,避免版本识别冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:07:13