ASP.NET Core 2 Web API中Swagger失效:无操作定义问题求助
解决Swagger显示"No operations defined in spec!"的问题
看起来是执行EF DB-First操作后,Swagger的配置或者API控制器的扫描逻辑出了问题,咱们一步步排查修复:
1. 补全Startup.cs里的Swagger核心配置
你的Startup.cs里只注释了Swagger注册的提示,但没有实际的配置代码,这是导致Swagger找不到API操作的核心原因之一。更新ConfigureServices和Configure方法:
更新ConfigureServices方法
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); // 注册Swagger生成器,定义Swagger文档信息 services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" }); // 如果之前启用了XML注释(可选,若之前有配置则保留) var basePath = PlatformServices.Default.Application.ApplicationBasePath; var xmlPath = Path.Combine(basePath, "SmoEventApi.xml"); c.IncludeXmlComments(xmlPath); }); // 注册EF上下文(DB-First生成后必须配置,否则控制器依赖注入会失败) services.AddDbContext<SmoEventContext>(options => options.UseSqlServer(Configuration.GetConnectionString("YourConnectionStringName"))); }
补全Configure方法
如果你的Startup.cs里缺少Configure方法,或者配置不完整,补充如下:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // 启用Swagger JSON接口,供UI读取数据 app.UseSwagger(); // 启用Swagger UI可视化界面 app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); // 可选:把Swagger UI设为项目默认启动页 // c.RoutePrefix = string.Empty; }); app.UseMvc(); }
2. 确认API控制器的有效性
DB-First操作一般不会修改控制器,但要确保控制器符合Swagger的扫描要求:
- 控制器类继承自
ControllerBase(或添加[ApiController]属性并继承Controller) - 控制器带有路由属性,比如
[Route("api/[controller]")] - 控制器内的接口方法带有明确的HTTP动词属性(
[HttpGet]/[HttpPost]/[HttpPut]等)
示例正确的控制器结构:
[Route("api/[controller]")] [ApiController] public class EventsController : ControllerBase { private readonly SmoEventContext _context; public EventsController(SmoEventContext context) { _context = context; } // GET: api/Events [HttpGet] public async Task<ActionResult<IEnumerable<Event>>> GetEvents() { return await _context.Events.ToListAsync(); } }
3. 最后排查步骤
- 检查是否不小心删除了API控制器文件
- 确认当前启动项目是你的Web API项目
- 清理解决方案后重新生成(右键解决方案 ->
Clean Solution->Rebuild Solution)
完成以上操作后重启项目,Swagger应该就能正常加载并显示你的API操作了。
内容的提问来源于stack exchange,提问作者Kåre Rasmussen
相关产品推荐
相关产品推荐

