swagger 安装Swashbuckle错误-无法加载API定义

lokaqttq  于 2023-10-18  发布在  其他
关注(0)|答案(4)|浏览(142)

有没有办法在Swashbuckle/Swagger错误上获得堆栈跟踪或内部异常?在某种程度上,它停止工作。我不确定是不是在我从.Net Core 2.0升级到2.1的时候,但我很确定在那之后它仍然可以工作。当我导航到myapidomain/swagger/index.html时,我得到这个错误:

这可没什么用两周前还能用的...我没有改变斯威格的配置一直都是这样

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");
    });
    ...
}

我正在API上使用Swashbuckle.AspNetCore3.0.0。

xwbd5t1u

xwbd5t1u1#

同意UI上的信息对调试没有帮助(加载API定义失败/获取错误等),但是可以通过打开浏览器的调试工具(例如,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)
...

这会产生错误:

你现在应该能找到并修复了。

j2datikz

j2datikz2#

如果你的API有两个或多个相同的[HttpGet],它就不能工作了。您应该指定[HttpGet],[HttpGet ("{id}")]

[HttpGet]
`[HttpGet ("{id}")]`
llew8vvj

llew8vvj3#

我发现SwaggerFunctions需要匿名才能完成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"));
    }
}
ny6fqffe

ny6fqffe4#

我今天遇到了这个问题,并尝试了很多方法来解决它,你应该在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();
}

在我的项目中,

相关问题