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

运行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,提问作者Ракићевић Димитрије

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:34:56