调试Swashbuckle错误-无法加载API定义

时间:2018-08-03 09:00:33

标签: swagger asp.net-core-webapi swashbuckle asp.net-core-2.1 .net-core-2.1

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

enter image description here

这不是很有帮助。它大约在2个星期前就开始运作了……我没有更改任何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。

4 个答案:

答案 0 :(得分:9)

同意UI调试不是真正有用,但是可以通过打开浏览器的调试工具(例如Chrome上的F12),刷新/swagger端点,然后检查{ {1}}有效负载-这是XHR请求,将失败,并显示swagger.json状态码。

(我建议在一个大项目中为链接添加书签,以便将来您可以直接转到json文件,例如500

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

https://MyHost/swagger/v1/swagger.json

哪个会产生错误:

SwaggerError

您现在应该可以找到并修复它。

答案 1 :(得分:0)

我今天遇到了这个问题,并尝试了很多解决方法,您必须在C#控制器代码中的[http]标签之前删除所有[Route],例如以下代码 例如:

    [Route("~/api/getAll")]
    [HttpGet]
    public ActionResult<List<asteriksModel>>GetAll()
    {
        return _context.asterList.ToList();
    }

您的路线代码必须是这样

    [HttpGet]
    public ActionResult<List<asteriksModel>>GetAll()
    {
        return _context.asterList.ToList();
    }

在我的项目中,它工作正常,

答案 2 :(得分:0)

如果您的api具有相同的两个或多个ssh-copy-id,则无法正常工作。 您应该指定[HttpGet],[HttpGet]

[HttpGet ("{id}")]

答案 3 :(得分:0)

我发现SwaggerFunctions需要由Anonymous来完成Swagger / UI。

public static class SwaggerFunctions
{
    [SwaggerIgnore]
    [FunctionName("Swagger")]
    public static Task<HttpResponseMessage> Swagger(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "swagger/json")]
    HttpRequestMessage req,
        [SwashBuckleClient] ISwashBuckleClient swashBuckleClient)
    {
        return Task.FromResult(swashBuckleClient.CreateSwaggerDocumentResponse(req));
    }

    [SwaggerIgnore]
    [FunctionName("SwaggerUi")]
    public static Task<HttpResponseMessage> SwaggerUi(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "swagger/ui")]
    HttpRequestMessage req,
        [SwashBuckleClient] ISwashBuckleClient swashBuckleClient)
    {
        return Task.FromResult(swashBuckleClient.CreateSwaggerUIResponse(req, "swagger/json"));
    }
}