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

