【发布时间】:2019-11-27 15:53:52
【问题描述】:
我有一个面向 .NET Core 2.1 框架的 ASP.NET Core MVC 应用程序。此应用程序提供 RESTful API 并返回 JSON 数据。
使用SwaggerHub 中基于 Web 的交互式 SwaggerGen,我创建了一个 API 定义文档,并将其以 JSON 格式保存为“swagger.json”在我的 ASP.NET Core MVC 应用程序项目的一个文件夹中。
由于我已经定义了 API,我不需要在我的应用程序中运行 SwaggerGen。我只想让 SwaggerUI 显示我创建的静态“swagger.json”文件。
我已经阅读了 Swashbuckle 文档以及几个“如何开始使用 Swashbuckle”教程,但它们都假设 SwaggerGen 将用于从我的 API 动态创建 Swagger API 文档。
我已将“Swashbuckle.AspNetCore”NuGet 包添加到我的应用程序的依赖项中。
在我的应用程序 Startup.cs 类的 Configure() 方法中,我添加了 UseSwaggerUI 指令:
app.UseSwaggerUI(c => {
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
当我在 Visual Studio 中运行我的应用程序时,我得到一个正常的空白页。
根据 Swashbuckle 文档,假设已添加 SwaggerGen 并动态生成 API 定义(文件?),则 SwaggerUI 格式的 API 文档应在相对“/swagger”路径中可用。
获取“/swagger”相对路径会产生“400 Bad Request”错误。
问:SwaggerGen 会生成自己的“swagger.json”文件吗?如果会,它将在哪里创建这个文件?
问:有没有办法告诉 SwaggerUI 在哪里可以找到并显示我手动创建的“swagger.json”API 定义文件?
谢谢!
【问题讨论】:
-
你为什么要这样做?重点是让 swagger.json 自动生成,因此它与您对 API 所做的更改保持同步。如果您要使用静态 swagger.json,那么您还需要记住在进行更改时重新生成它,我可以向您保证,您不会记得这样做。这是性能问题吗? JSON 仅在被请求时生成,这意味着它只会影响 API 文档,而不是整个站点。即便如此,对 gen.
-
嗨,@ChrisPratt。 Swagger(实际上是 SmartBear)有许多 API 优先工具,包括可以从 API 定义生成应用程序源代码的工具。如果我们从 API 定义生成代码,那么我们已经翻转了“操作顺序”并将优先级从代码更改为设计。这也保证了对 API 定义的更改永远不会被遗忘。它们是首先制作的,并且是源代码中的结果。
-
设计优先是一种很好的方法。但是@ChrisPratt 让我们认为
Why would you want to do this?Swashbuckle 是修理瑞士手表的大锤。为什么用那个?那是“简单”的 NuGet 包选项吗? -
@DougWilson 我的意思是 Swagger UI 只是一个 SPA。如果您不将它与 Gen 结合使用,那么它根本不需要成为您项目的一部分。把它扔到某个地方,然后给它你的静态 JSON 文件。完成。
-
@ChrisPratt,我们的用例是微服务,每个都有自己的 API 定义。它们旨在在 Docker 容器中独立运行,因此自包含和自给自足很重要。我不想仅仅为了显示 SwaggerUi 文档而包含 Node 服务器,特别是因为 Swashbuckle 声称可以在 ASP.NET Core MVC 项目中执行此操作。
标签: asp.net-core-mvc openapi swashbuckle