Swashbuckle / swagger 文档缺失信息

Swashbuckle / swagger Document missing information

我似乎无法理解为什么我的 swagger 文档 UI 缺少控制器中每个 Get 和 Post 的模型架构详细信息?

我是 运行 SwashBuckle ASP.NET 核心 nuget 包 v4.0.1,即使升级到最新包后也没有显示模式详细信息? (我的 WebAPI 是在 Core 2.2 中构建的)

我只有 运行 通过 swagger 文档 w.r.t 配置,没有任何指示我可以从哪里获得要显示的附加信息?

经过一番研究,我发现如果我使用以下属性

[ProducesResponseType(typeof(Models.Customer), StatusCodes.Status200OK)]
[HttpGet("{Id}/customer")]
public async Task<IActionResult> GetCustomer(int Id)

显示 Schemas 大摇大摆 UI 块,这正是我想要的。但是我不想经历 我的每个 Controller Get / Post 方法并添加此属性。它总是在没有这个的情况下工作,但是什么可以阻止它开箱即用?

所以,你的方法returns IActionResult,这是很常见的事情,编译器看不到返回的真实结果。这就是为什么你应该使用 ProducesResponseType.

如果您想使用 IActionResult 和 Asp.Net MVC 控制器,只能通过这种方式使用。

但还有一点是:你真的需要 Asp.Net MVC 控制器吗?如果您需要 Asp.Net MVC 控制器,为什么要创建 swagger 文档?这些都是自相矛盾的。

Swagger 需要创建 Public Api 文档。增加外部程序员使用您的 API 的可能性。在这种情况下,最好使用 Api 控制器。

如果您需要使用 Asp.Net MVC 控制器和 Autorization 等功能,那么您不需要创建 Swagger,因为它应该在您自己的项目中使用。

Swashbuckle 根据动作的 return 类型创建模型。您有多种选择:

  • 您可以 return 实际类型(例如 public async Task<Models.Customer> GetCustomer(int Id)

  • 如果你return一个IActionResult,你可以使用ProducesResponseType属性

  • 您可以 return 一个 ActionResult<T>,其工作方式与 IActionResult 相同,但具有实际类型

您可以查看文档以获取更多信息:https://docs.microsoft.com/en-us/aspnet/core/web-api/action-return-types?view=aspnetcore-3.1