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

Mar*_*mro 17 c# asp.net swagger asp.net-core

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

http://localhost:<random_port>/swagger/ui
Run Code Online (Sandbox Code Playgroud)

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

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

.EnableSwagger(c =>
{
    c.RootUrl(req => myCustomBasePath);
});
Run Code Online (Sandbox Code Playgroud)

max*_*pan 32

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

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

  • 如果您想对 Swagger UI 和 swagger.json 文件使用像“/prefix/swagger/...”这样的 URL 前缀,那么单独使用“RoutePrefix”是不够的。您还需要设置“RouteTemplate”属性。 (4认同)

Esp*_*ans 10

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

如果要将“ mycoolapi”添加到默认的swagger UI URL的开头,例如:http://<server>/mycoolapi/swagger,请执行以下操作:

在您的Startup.cs Configure方法中:

    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";
    });
Run Code Online (Sandbox Code Playgroud)

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

  • 这应该被接受。现在在.net core中设置RouteTemplate是必须的。在.net框架中情况有所不同。 (2认同)

Bor*_*itz 8

其他答案在 .NET 5 中对我不起作用。以下是我如何将“文档”添加到路由中

app.UseSwagger(c => c.RouteTemplate = "/swagger/docs/{documentName}/swagger.json");
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/docs/v2/swagger.json", "My API"));
Run Code Online (Sandbox Code Playgroud)