如何在ASP.NET核心中更改Swagger的基本URL

时间:2016-08-24 06:37:36

标签: c# asp.net asp.net-core swagger

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

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

我想使用不同的基本网址而不是/swagger/ui。我如何/在哪里配置?

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

.EnableSwagger(c =>
{
    c.RootUrl(req => myCustomBasePath);
});

6 个答案:

答案 0 :(得分:25)

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

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

答案 1 :(得分:3)

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

如果要将“ mycoolapi”添加到默认swagger UI URL的开头(例如:http://<server>/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";
    });

然后,如果您当前拥有启动设置,以便在启动时通过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"
      }
    }
  }

答案 2 :(得分:1)

  1. 打开 launchSettings.json 文件。
  2. “个人资料” 节点下,根据您的设置,您应该拥有一个或多个个人资料。在可能的情况下,我有“ IIS Express” 和另一个以我的项目名称命名的项目( 例如WebApplication1 ),现在更改了 launchUrl 进入“ launchUrl”:“ swagger” 解决了我的问题。
  3. 如果这不起作用,并且您有其他配置文件,请进行相同的操作并进行测试。

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

您也可以在Config中完成此操作

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

答案 5 :(得分:0)

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

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

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

app.UsePathBase($"{pathbase}");