首页 > 解决方案 > 调试 Swashbuckle 错误 - 无法加载 API 定义

问题描述

有什么方法可以获取 Swashbuckle/Swagger 错误的堆栈跟踪或内部异常?在某些时候,它停止了工作。我不确定是不是在我从 .Net Core 2.0 升级到 2.1 时,但我很确定它在那之后仍然可以工作。当我导航到 myapidomain/swagger/index.html 时,我收到此错误:

在此处输入图像描述

这不是很有帮助。大约两周前它还在工作……我没有更改任何 Swagger 配置。和以前一样:

public void ConfigureServices(IServiceCollection services)
{
    ...
     services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info
            {
                Version = "v1",
                Title = "My.API",
                Description = "Test"
            });
        });   
}


public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
        app.UseDeveloperExceptionPage();
    else
        app.UseHsts();

    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "PropWorx API V1");
    });
    ...
}

我在 ASP.Net Core 2.1 Web API 上使用 Swashbuckle.AspNetCore 3.0.0。

标签: swaggerasp.net-core-webapiswashbuckleasp.net-core-2.1.net-core-2.1

解决方案


同意 UI 调试并不是真的有用,但是可以通过打开浏览器的调试工具(例如 Chrome 上的 F12),刷新/swagger端点,然后检查swagger.json有效负载来抓取完整的异常跟踪 - 这是一个 XHR 请求,它将失败并显示500状态码。

(我建议在一个大项目上为链接添加书签,以便将来您可以直接转到 json 文件,例如https://MyHost/swagger/v1/swagger.json

例如,在下面的人为错误中,我在两种方法之间复制了相同的路线:

[HttpGet]
[Route("parseenum")]
public ActionResult CheckEnum([FromQuery] MyEnum someEnum)
...

[HttpGet]
[Route("parseenum")]
public ActionResult CheckEnum2([FromQuery] MyEnum someEnum)
...

这会产生错误:

招摇错误

您现在应该能够追踪和修复它。


推荐阅读