.NET Core 2.1上的Swashbuckle/Swagger自升级以来已停止工作

Sha*_*ica 7 swagger swashbuckle asp.net-core

我有一个.NET Core 2.0应用程序,使用Swashbuckle/Swagger生成API文档.当我们在2.1.0预览时,Swagger工作正常.然后我们进行了2.1.0版和SDK 2.1.300的大升级.我们没有注意到事情何时破裂,但现在我们的Swagger文档将无法加载.这是我们看到的: 无法加载API定义错误获取错误未定义/swagger/v1/swagger.json

Project引用了Swashbuckle.AspNetCore2.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");
});
Run Code Online (Sandbox Code Playgroud)

并在Configure():

app.UseSwagger();

app.UseSwaggerUI(swaggerUiOptions => swaggerUiOptions.SwaggerEndpoint("/swagger/v1/swagger.json", "My API v1"));
Run Code Online (Sandbox Code Playgroud)

我发现了很多其他类似的问题,其中一个问题表明可能存在重复的端点; 我尝试添加一个调用,.ResolveConflictingEndpoints()但没有任何区别.我搜索了我的项目文件夹,没有调用文件swagger.json,所以我猜这是问题所在.

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

小智 9

这通常表示Swashbuckle因某种原因不支持的控制器/操作.

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

正如HelderSepu所说,很难确切知道导致失败的原因,因此调试的最佳方法可能只是删除一半控制器(只需将文件移动到临时位置)并检查问题是否仍然存在.然后你会知道哪一半的控制器包含麻烦的动作.您可以"二进制搜索"删除控制器(然后执行操作),直到找出导致Swashbuckle无法生成Swagger.json的操作方法.一旦你知道这一点,你的代码中是否存在某些问题或者应该在Swashbuckle repo中提交的问题应该是显而易见的.

例如,Swashbuckle似乎不支持开放泛型,因此具有响应类型属性[ResponseType(typeof(IEnumerable<>))]可能会导致此类行为.这也可能是一个模糊的路线问题或者像Swashbuckle绊倒的事情.一旦你将失败的原因缩小到更具体的东西,就可以酌情修复或归档.


Kir*_*eed 6

今天我发现我可以在浏览器中转到json url并获取一些错误信息,例如

myapiurl / api / vi / swagger.json