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

.NET Core Web API中Swagger页面404问题排查求助

解决Swagger 404错误的配置修正

你的问题主要出在中间件注册顺序以及缺少API版本探索器的配置上,这两个点导致Swagger无法正常被访问和生成版本化文档。下面是具体的修正方案:

1. 调整中间件注册顺序

ASP.NET Core的中间件是按注册顺序执行的,UseMvc属于终端中间件——会处理所有匹配的路由并终止请求管道。你现在把它放在了Swagger中间件前面,导致请求/swagger时会先被Mvc处理,找不到对应的控制器就直接返回404了。

把Swagger相关的中间件移到UseMvc之前:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // Url Path Rewriter
    RewriteOptions rewriteOptions = new RewriteOptions();
    if (!env.IsDevelopment())
    {
        rewriteOptions.AddRedirectToHttps();
    }
    else
    {
        app.UseDeveloperExceptionPage();
    }
    app.UseRewriter(rewriteOptions);

    // Swagger 移到 UseMvc 前面
    app.UseSwagger(c =>
    {
        c.PreSerializeFilters.Add((swagger, httpReq) => swagger.Host = httpReq.Host.Value);
    });
    app.UseSwaggerUI(
        c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs");
        });

    // Use MVC 放在最后
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

2. 添加API版本探索器配置

要让Swagger正确识别API版本,你需要在ConfigureServices中添加AddVersionedApiExplorer,它会为每个API版本生成对应的Swagger文档元数据:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    // Add API Versioning
    services.AddApiVersioning(
        options =>
        {
            options.DefaultApiVersion = new ApiVersion(1, 0);
            options.AssumeDefaultVersionWhenUnspecified = true;
            options.ReportApiVersions = true;
        });
    // 添加版本探索器,用于Swagger集成
    services.AddVersionedApiExplorer(options =>
    {
        options.GroupNameFormat = "'v'VVV";
        options.SubstituteApiVersionInUrl = true;
    });

    // Add Swagger
    string pathToDoc = "RegistriesApi.xml";
    services.AddSwaggerGen(options =>
    {
        options.SwaggerDoc("v1", new Info
        {
            Title = "Registries API",
            Version = "v1",
            Description = "A simple api to interact with AMA registries information",
            TermsOfService = "None"
        });
        string filePath = Path.Combine(PlatformServices.Default.Application.ApplicationBasePath, pathToDoc);
        options.IncludeXmlComments(filePath);
        options.DescribeAllEnumsAsStrings();
    });
}

3. 验证XML文档生成(可选但推荐)

你配置了IncludeXmlComments,需要确保项目已经启用了XML文档生成:

  • 右键项目 -> 属性 -> 生成 -> 勾选"XML文档文件",确保路径和你代码里的RegistriesApi.xml一致。
  • 如果启用了,可在项目文件中添加配置排除CS1591(缺少注释)警告:
<PropertyGroup>
  <NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>

完成以上修改后,重启项目,访问/swagger应该就能正常看到Swagger文档页面了,同时你的版本化API也能正确被Swagger识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:13:11