Asp.net core mvc 如何使用Swashback';s SwaggerUI以显示静态swagger.json文件,而不是SwaggerGen';什么是动态创建的定义?

Asp.net core mvc 如何使用Swashback';s SwaggerUI以显示静态swagger.json文件,而不是SwaggerGen';什么是动态创建的定义?,asp.net-core-mvc,openapi,swashbuckle,Asp.net Core Mvc,Openapi,Swashbuckle,我有一个ASP.NET Core MVC应用程序,目标是.NET Core 2.1框架。此应用程序提供RESTful API并返回JSON数据 使用中的交互式、基于web的SwaggerGen,我创建了一个API定义文档,并将其以JSON格式保存为“swagger.JSON”,保存在ASP.NET核心MVC应用程序项目的一个文件夹中 因为我已经定义了API,所以我不需要在我的应用程序中运行SwaggerGen。我只想让SwaggerUI显示我创建的静态“swagger.json”文件 我已经阅

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

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

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

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

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

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

app.UseSwaggerUI(c => {
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
当我在VisualStudio中运行我的应用程序时,我会得到一个普通的空白页面

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

获取相对“/swagger”路径会产生“400错误请求”错误

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

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


谢谢

您可以使用
url
参数告诉任何招摇过市的用户界面在哪里找到文件:

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


如果您想自己托管一个招摇过市的UI,只需将dist文件夹复制到您的Web服务器:

  • 在本地计算机上,创建一个小节点项目,安装swagger ui dist

  • 将安装的文件从node_modules/swagger ui dist复制到承载swagger站点的Web服务器

  • 将生成的swagger.json复制到Web服务器中的同一文件夹中

  • 编辑index.html并将url添加到json,例如“/swagger.json”

  • 完成

  • 来源


    你为什么要这么做?几乎所有的要点都是自动生成swagger.json,因此它与您对API所做的更改保持同步。如果您要使用静态swagger.json,那么您还需要记住在任何时候进行更改时重新生成它,我可以向您保证,您不会记得这样做。这是表演吗?JSON只在被请求时生成,这意味着它只会影响API文档,而不会影响整个站点。即使这样,对将军来说也不难。嗨,@ChrisPratt。Swagger(实际上是SmartBear)有很多API第一工具,包括一个可以从API定义生成应用程序源代码的工具。如果我们从API定义生成代码,那么我们已经改变了“操作顺序”,并将优先级从代码更改为设计。这也保证了永远不会忘记对API定义的更改。它们是首先生成的,并且是源代码的结果。设计优先是一种很好的方法。但是@ChrisPratt让我们思考
    你为什么要这么做?
    Swashback是一个用来修理瑞士手表的大锤。为什么要用这个?这是“简单”的NuGet软件包选项吗?@DougWilson I guest我的观点是,Swagger UI只是一个SPA。如果您没有将它与Gen结合,那么它根本不需要成为您项目的一部分。只要把它扔到某个地方,然后把静态JSON文件提供给它。完成。@ChrisPratt,我们的用例是微服务,每个都有自己的API定义。它们打算在Docker容器中独立运行,因此自给自足非常重要。我不想仅仅为了显示SwaggerUi文档而包含一个节点服务器,特别是因为Swashback声称可以从ASP.NET核心MVC项目中实现这一点。谢谢,Helder,但在本例中,另一个服务器(位于githubusercontent.com)正被用于服务Swagger文档。我正在寻找一种方法让我的ASP.NET核心MVC应用程序为其提供服务。@DougWilson您正在为您的项目提供您的Swagger文档(静态“Swagger.json”文件),对吗?只需将其传递给任何招摇过市的用户界面
    http://petstore.swagger.io/?URL=https://foo.bar/path/to/your/swagger.json
    托管我自己的swagger ui副本以服务于我的静态swagger.json API定义文件是一个很好的建议。谢谢你,赫尔德@RobMcCabe我认为UI现在是区分大小写的,我更正了提供的示例,表明它确实有效