如何在 ASP.NET Core 中更改 Swagger 的基本 url

Posted

技术标签:

【中文标题】如何在 ASP.NET Core 中更改 Swagger 的基本 url【英文标题】:How to change base url of Swagger in ASP.NET core 【发布时间】:2016-12-31 03:50:48 【问题描述】:

默认情况下,当您在 ASP.NET Core 项目中启用 swagger 时,它在 url 上可用:

http://localhost:<random_port>/swagger/ui

我想使用不同的基本 URL,而不是 /swagger/ui。我如何/在哪里可以配置它?

我发现对于旧版本,您可以配置RootUrl,但在 ASP.NET Core 中没有类似的方法:

.EnableSwagger(c =>

    c.RootUrl(req => myCustomBasePath);
);

【问题讨论】:

让我知道它是否适合你。 【参考方案1】:

新的 swagger 版本为您提供了一个名为 RoutePrefix 的属性。

app.UseSwaggerUI(c =>

    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    c.RoutePrefix = "docs";
);

应该适用于 .net 核心

【讨论】:

如果您想为 Swagger UI 和 swagger.json 文件使用像 /prefix/swagger/... 这样的 URL 前缀,那么单独的 RoutePrefix 是不够的。您还需要设置RouteTemplate 属性。【参考方案2】:

对于 ASP.NET Core 2(并使用 Swashbuckle.AspNetCore.Swagger -Version 4.0.1),可以做几件事来完成更改默认 Swagger UI 基本 URL 的完整配置。

如果您想将“mycoolapi”添加到默认 Swagger UI URL 的开头,例如:http://&lt;server&gt;/mycoolapi/swagger,请执行以下操作:

在您的 Startup.cs 配置方法中:

    app.UseSwagger(c =>
    
        c.RouteTemplate = "mycoolapi/swagger/documentname/swagger.json";
    );


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

然后,如果您当前有 launchSettings 以在启动时以 swagger UI 启动浏览器(出于开发目的),请类似地更新您的 launchSettings.json 文件配置文件部分:

  "profiles": 
    "IIS Express": 
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "mycoolapi/swagger",
      "environmentVariables": 
        "ASPNETCORE_ENVIRONMENT": "Development"
      
    ,
    "MyProject.Web": 
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "mycoolapi/swagger",
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": 
        "ASPNETCORE_ENVIRONMENT": "Development"
      
    
  

【讨论】:

您的 iisExpress applicationUrl 值是多少? ..我尝试了所有方法,但由于某种原因我无法使其工作..最后我想将它托管在 IIS 中('localhost/appName/') 这应该被接受。 Set RouteTemplate 现在是 .net core 中的必需品。在 .net 框架中是不同的。【参考方案3】:
    打开 launchSettings.json 文件。 根据您的设置,在 "profiles" 节点下,您应该有一个或多个配置文件。在可能的情况下,我有 "IIS Express" 和另一个以我的项目名称命名的(例如 WebApplication1 ),现在更改 launchUrl 进入 "launchUrl": "swagger" 解决了我的问题。 如果这不起作用并且您有其他配置文件执行相同的操作并进行测试。

【讨论】:

【参考方案4】:

您也可以在 Config 中执行此操作

app.UseSwaggerUI(c =>
            
                c.RoutePrefix = string.Empty;
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "MY API");
            );

【讨论】:

【参考方案5】:

其他答案在 .NET 5 中对我不起作用。这是我将“文档”添加到路由的方式

app.UseSwagger(c => c.RouteTemplate = "/swagger/docs/documentName/swagger.json");
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/docs/v2/swagger.json", "My API"));

【讨论】:

【参考方案6】:

我不得不仔细研究原始文档,因为上述所有解决方案都不起作用。 Startup.cs 中的这段代码对我有用:

app.UseSwagger();
app.UseSwaggerUI(c => 
    c.SwaggerEndpoint($"./v1/swagger.json", "SapWeb v1");
);

我的站点是 IIS 中的子站点。所以,一开始,我不得不设置 PathBase:

app.UsePathBase($"pathbase");

【讨论】:

【参考方案7】:

在 StartUp 类的 Configure 方法中启用中间件的 UseSwaggerUi() 扩展方法需要两个变量。 baseRoute 默认在swagger/ui 上,swaggerUrl 默认在swagger/v1/swagger.json 上。只需提供不同的 baseRoute。

//Swagger will be available under '/api' url
app.UseSwaggerUi("api");

如果人们想了解有关为 ASP.NET Core 配置 Swagger 的更多信息,我已经写了一篇博文以开始使用:https://dannyvanderkraan.wordpress.com/2016/09/09/asp-net-core-1-0-web-api-automatic-documentation-with-swagger-and-swashbuckle/

【讨论】:

以上是关于如何在 ASP.NET Core 中更改 Swagger 的基本 url的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Asp.Net Core 中某些操作的序列化方法(Typed,None)?

Asp.Net Core Web API 应用程序:如何更改监听地址?

在 ASP.NET Core Razor 页面中更改 cshtml 文件的名称

如何通过 ASP.NET Core 3 中的中间 Web API 传递未更改的 HTTP 响应?

在控制器中更改 ASP.NET Core 2.0 标识连接字符串

迁移到 ASP.Net Core 3 后如何更改此查询