.NET Core MVC项目Swagger无法显示API接口问题求助
问题排查与解决方案
核心问题:缺少Swagger文档生成中间件
你的Program.cs里没有调用app.UseSwagger(),这是生成swagger/v1/swagger.json的关键步骤,Swagger UI必须读取这个文件才能展示接口定义,这是导致"no api definition provided"的直接原因。
其他问题:Swagger UI配置重复与中间件顺序错误
你重复调用了UseSwaggerUi3()、无参数UseSwaggerUI()和带配置的UseSwaggerUI(),会造成配置冲突;同时中间件顺序不符合.NET Core规范,正确的执行顺序会影响Swagger的正常工作。
修正后的Program.cs代码
var builder = WebApplication.CreateBuilder(args); // 添加控制器与MVC服务 builder.Services.AddControllers(); builder.Services.AddControllersWithViews(); // 配置Swagger服务 builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "API Name", Version = "v1" }); }); builder.Services.AddEndpointsApiExplorer(); var app = builder.Build(); app.UseForwardedHeaders(); if (app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); // 仅开发环境启用Swagger(规范做法,可根据需求调整) app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "API Name V1"); // 可选:将Swagger UI设置为网站根路径 // c.RoutePrefix = string.Empty; }); } // 中间件顺序必须遵循:路由 -> 认证 -> 映射控制器 app.UseRouting(); app.UseAuthentication(); app.MapControllers(); app.Run();
额外检查点
- 确认
ApplicationAPIController所在命名空间被项目正确包含,未被排除在程序集扫描范围外 - 检查
IApplicationService和IMapper是否已正确注册到依赖注入容器(依赖注入失败可能导致控制器无法正常初始化,但Swagger通常仍会展示接口定义) - 直接访问
https://localhost:<端口>/swagger/v1/swagger.json,若能返回JSON文档,说明Swagger生成正常;若返回404,需再次检查Swagger服务配置与中间件顺序
内容的提问来源于stack exchange,提问作者Cassawena
相关产品推荐
相关产品推荐

