运行dotnet watch run后某Controller的Http方法未在Swagger UI显示
问题:某Controller的Http方法未在Swagger UI中显示
我有两个Controller类,其中一个运行正常,但执行dotnet watch run命令后,另一个Controller的Http方法未在Swagger UI中显示。以下是无法正常显示的Controller代码:
[ApiController] [Route("[controller]")] public class PolicaController : ControllerBase { public Context Context {get; set;} public PolicaController(Context context){Context=context;} [Route("DodajPolicu/{idKluba}/{oznaka}/{max}/{trenutno}")] [HttpPost] public async Task<ActionResult> DodajPolicu(int idKluba, string oznaka, int max, int trenutno) { if (trenutno > max) return BadRequest("Neodgovarajuci parametri!"); var Klub = Context.Klubovi .Where(k => k.ID == idKluba) .FirstOrDefault(); if (Klub == null) return BadRequest("Nepostojeci klub!"); var provera = Context.Police .Where(p => p.Oznaka == oznaka) .FirstOrDefault(); if (provera != null) return BadRequest("Polica sa ovom oznakom vec postoji!"); Polica p = new Polica(); p.VideoKlub = Klub; p.Oznaka = oznaka; if (max <= 0) p.Maksimum = 10; else p.Maksimum = max; if (trenutno <= 0) p.Trenutno = 5; else p.Trenutno = trenutno; try { Context.Police.Add(p); await Context.SaveChangesAsync(); return Ok(p); } catch(Exception e) { return BadRequest(e.Message); } } }
排查与解决方案
- 确认Swagger扫描范围:检查Program.cs中Swagger的配置,确保已包含当前Controller所在的程序集。比如是否添加了
builder.Services.AddControllers().AddApplicationPart(typeof(PolicaController).Assembly);,或使用IncludeXmlComments时路径正确。 - 合并路由与Http方法属性:将方法上的
[Route("DodajPolicu/{idKluba}/{oznaka}/{max}/{trenutno}")]和[HttpPost]替换为[HttpPost("DodajPolicu/{idKluba}/{oznaka}/{max}/{trenutno}")],避免路由配置冲突。 - 检查返回类型序列化:确保
Polica类的所有属性为public,且无循环引用。如果存在循环引用,需在Swagger配置中添加忽略设置:builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "你的API", Version = "v1" }); c.AddJsonOptions(options => { options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles; }); }); - 清理项目缓存:执行
dotnet clean,再运行dotnet build和dotnet watch run,避免旧编译结果影响。 - 排查忽略Api属性:确认Controller或方法上没有
[ApiExplorerSettings(IgnoreApi = true)]属性,该属性会让Swagger忽略对应接口。
内容的提问来源于stack exchange,提问作者Ракићевић Димитрије
相关产品推荐
相关产品推荐

