Как изменить базовый url Swagger в ядре ASP.NET

По умолчанию, когда вы включаете swagger в проекте ASP.NET Core, он доступен по 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";
});

Ответ 2

Для ASP.NET Core 2 (и с использованием Swashbuckle.AspNetCore.Swagger -Version 4.0.1) можно сделать несколько вещей для полной конфигурации изменения базового URL-адреса пользовательского интерфейса Swashbuckle.AspNetCore.Swagger -Version 4.0.1 по умолчанию.

Если вы хотите добавить "mycoolapi" в начало 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";
    });

Затем, если в настоящее время у вас есть 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"
      }
    }
  }

Ответ 3

  1. Откройте файл launchSettings.json.
  2. В разделе "профили" в зависимости от вашей установки вы должны иметь один или несколько профилей. В этом случае у меня был "IIS Express", а другой с именем с именем моего проекта (например, WebApplication1), теперь меняя запись launchUrl на "launchUrl": "swagger" решил мою проблему.
  3. Если это не работает, и у вас есть другие профили, сделайте то же самое и проверьте.

Ответ 4

UseSwaggerUi() расширения UseSwaggerUi() для включения промежуточного ПО в методе Configure для класса StartUp принимает две переменные. baseRoute который по умолчанию имеет значение swaggerUrl swagger/ui, и swaggerUrl который по умолчанию находится по swagger/v1/swagger.json. Просто укажите другой baseRoute.

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

Если люди хотели бы узнать больше о настройке Swagger для ASP.NET Core, я написал блог-версию для начала работы: https://dannyvanderkraan.wordpress.com/2016/09/09/asp-net-core-1- 0-веб-апи-автомат-документация-с-чванством-и-swashbuckle/

Ответ 5

Вы можете сделать это также в Config

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