我有一个.NET Core 2.0应用程序,使用Swashbuckle/Swagger生成API文档。当我们进行2.1.0预览时,Swagger运行良好。然后,我们对2.1.0版本和SDK 2.1.300进行了重大升级。我们没有确切地注意到什么时候发生了问题,但是现在我们的Swagger文档无法加载。这是我们看到的:
asp.net-core - 自升级以来,.NET Core 2.1上的Swashbuckle/Swagger已停止工作-LMLPHP

项目引用了Swashbuckle.AspNetCore 2.5.0版。 Startup.cs中的相关代码如下。在ConfigureServices()中:

services.AddSwaggerGen(swaggerOptions =>
{
    // Register a swagger doc
    swaggerOptions.SwaggerDoc("v1", new Info
    {
        // Optional descriptive info that will be included in the Swagger output
        Contact = new Contact
        {
            Name = "LightSail",
            Url = "https://myurl.com/"
        },
        Description = "A description of the API can go here",
        Title = "My API",
        Version = "v1"
    });

    // Xml file to get comment information from
    swaggerOptions.IncludeXmlComments("App_Data/Api.xml");
});

并在Configure()中:
app.UseSwagger();

app.UseSwaggerUI(swaggerUiOptions => swaggerUiOptions.SwaggerEndpoint("/swagger/v1/swagger.json", "My API v1"));

我发现了许多其他类似的问题,其中之一表明可能存在重复的端点。我尝试添加一个对.ResolveConflictingEndpoints()的调用,但这没什么区别。我已经搜索了我的项目文件夹,没有名为swagger.json的文件,所以我想这就是问题所在。

有什么想法为什么这不起作用,或者如何解决?

最佳答案

这通常表示Swashbuckle由于某种原因不支持的 Controller / Action 。

预计您的项目中没有swagger.json文件。 Swashbuckle使用ASP.NET Core的ApiExplorer API动态创建并提供服务。这里可能发生的是Swashbuckle无法生成Swagger.json,因此UI无法显示。

正如HelderSepu所说,很难确切地知道导致故障的原因,因此调试的最佳方法可能就是删除一半的 Controller (只需将文件移到临时位置)并检查问题是否仍然存在。然后,您将知道哪一部分 Controller 包含麻烦的操作。您可以“二进制搜索”删除 Controller (然后再删除操作),直到找出导致Swashbuckle无法生成Swagger.json的操作方法为止。知道这一点后,很明显这是代码中的问题还是应该提交到Swashbuckle repo中的问题。

例如,Swashbuckle似乎不支持开放的泛型,因此具有[ResponseType(typeof(IEnumerable<>))]之类的响应类型属性可能会导致这种行为。路线不明确也可能是个问题,或者像是将Swashbuckle绊倒了。将故障原因缩小到更具体的问题后,可以适本地修复或提出问题。

关于asp.net-core - 自升级以来,.NET Core 2.1上的Swashbuckle/Swagger已停止工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50906772/

10-11 00:37