我有一个.NET Core 2.0应用程序,使用Swashbuckle/Swagger生成API文档。当我们进行2.1.0预览时,Swagger运行良好。然后,我们对2.1.0版本和SDK 2.1.300进行了重大升级。我们没有确切地注意到什么时候发生了问题,但是现在我们的Swagger文档无法加载。这是我们看到的:
项目引用了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/