首页 > 解决方案 > 如何使用 Swashbuckle 的 SwaggerUI 显示静态 swagger.json 文件而不是 SwaggerGen 的动态创建的定义?

问题描述

我有一个面向 .NET Core 2.1 框架的 ASP.NET Core MVC 应用程序。此应用程序提供 RESTful API 并返回 JSON 数据。

使用 SwaggerHub 中基于 Web 的交互式SwaggerGen,我创建了一个 API 定义文档,并将其以 JSON 格式作为“swagger.json”保存在我的 ASP.NET Core MVC 应用程序项目的文件夹中。

手动创建 'swagger.json' API 定义文件

由于我已经定义了 API,我不需要在我的应用程序中运行 SwaggerGen。我只想让 SwaggerUI 显示我创建的静态“swagger.json”文件。

我已经阅读了 Swashbuckle 文档以及几个“如何开始使用 Swashbuckle”教程,但它们都假设 SwaggerGen 将用于从我的 API 动态创建 Swagger API 文档。

我已将“Swashbuckle.AspNetCore”NuGet 包添加到我的应用程序的依赖项中。

Swashbuckle.AspNetCore NuGet 包

在我的应用程序的 Startup.cs 类的 Configure() 方法中,我添加了 UseSwaggerUI 指令:

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

当我在 Visual Studio 中运行我的应用程序时,我得到一个正常的空白页。

ASP.NET Core MVC 应用程序正在运行

根据 Swashbuckle 文档,假设已添加 SwaggerGen 并动态生成 API 定义(文件?),则 SwaggerUI 格式的 API 文档应在相对“/swagger”路径中可用。

获取相对“/swagger”路径会产生“400 Bad Request”错误。

请求 Swagger 文档会产生“400 Bad Request”错误

问:SwaggerGen 会生成自己的“swagger.json”文件吗?如果会,它将在哪里创建这个文件?

问:有没有办法告诉 SwaggerUI 在哪里可以找到并显示我手动创建的“swagger.json”API 定义文件?

谢谢!

标签: asp.net-core-mvcopenapiswashbuckle

解决方案


您可以使用参数告诉任何 Swagger-UI 在哪里可以找到文件url

这就是您所需要的,如果您已经使用 SwaggerHub 生成了定义,则可以使用任何 Swagger-UI 而无需安装 swashbuckle。


如果您想自己托管 Swagger-UI,只需将 dist 文件夹复制到您的网络服务器:
https ://github.com/swagger-api/swagger-ui/tree/master/dist


推荐阅读