我们有使用Swagger的.net core 2.1 mvc webapi项目。 我们使用以下软件包:
<PackageReference Include="Swashbuckle.AspNetCore" Version="3.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="3.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="4.3.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.ApiExplorer" Version="2.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.1" />
swashbuckle通过以下方式配置:
services.AddMvcCore().AddVersionedApiExplorer();
services.AddApiVersioning();
services.AddSwaggerGen();
这种设置中的所有功能(/swagger/v1/swagger.json
具有所有操作和定义,并且UI呈现正确->具有所有控制器和动作等)
我们正在尝试将.net核心项目从2.1迁移到2.2 .net核心。
为此(无警告),我们需要将Microsoft.AspNetCore.Mvc.ApiExplorer
nuget从2.1.2升级到2.2.0。
在此nuget更新之后,swagger.json(/swagger/v1/swagger.json
)不包含任何"paths": {}
和"definitions": {}
,这将导致swagger UI显示没有控制器/动作(它呈现:{{ 1}}
升级软件包后,以下软件包版本将更新:
No operations defined in spec!
我尝试将swashbuckle版本升级到v4.0.0,但未能解决问题。
我还缺少哪些包也需要更新,以便在使用<PackageReference Include="Microsoft.AspNetCore.Mvc.ApiExplorer" Version="2.2.0" /> //was 2.1.2
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.2.0" /> //was 2.1.1
包时可以正确生成swagger.json
?
还是我想念其他东西?
答案 0 :(得分:8)
刚刚遇到了同样的问题,我想我也会分享我的解决方案。 6.0.4 版本。
我必须将 [ApiController] 属性添加到我的控制器中。 Swagger 必须使用它来进行发现。
答案 1 :(得分:2)
将控制器中的公共方法更改为[NoAction]属性。
此外,将所有具有显式操作方法的操作更改为[HttpGet(“ api / get-customer”)],[HttpPost(“ api / save-customer”)],而不是[Route(“ api / get / -customer“)]。
答案 2 :(得分:0)
我找到了解决此问题的方法(也发布到了https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1166#issuecomment-497800414)
简而言之:我需要将HOST项目SDK从“ Microsoft.NET.Sdk”更改为“ Microsoft.NET.Sdk.Web”。
我没有明确确定是否应该像这样(但默认Microsoft模板在.net core 2.2中使用此SDK)
因此,如果有人能解释为什么从.net core 2.1迁移到2.2后需要使用.Web SDK,那就太好了