Как перенаправить с корневого url на/swagger/ui/index?

У меня есть проект WebApi с установленным на нем Swashbuckle.

В настройках по умолчанию я должен открыть в браузере http://localhost:56131/swagger/ui/index, чтобы просмотреть описание операций и тестовую страницу. Я хочу, чтобы он был доступен из корня сайта: http://localhost:56131/. Как я могу достичь этого?

Ответ 1

Под влиянием этот ответ на аналогичный вопрос, слегка измененный код:

public class WebApiConfig
{
    public static void Configure(IAppBuilder app)
    {
        var httpConfig = new HttpConfiguration();

        // Attribute routing
        config.MapHttpAttributeRoutes();

        // Redirect root to Swagger UI
        config.Routes.MapHttpRoute(
            name: "Swagger UI",
            routeTemplate: "",
            defaults: null,
            constraints: null,
            handler: new RedirectHandler(SwaggerDocsConfig.DefaultRootUrlResolver, "swagger/ui/index"));

        // Configure OWIN with this WebApi HttpConfiguration
        app.UseWebApi(httpConfig);
    }
}

Таким образом, нет необходимости создавать новый контроллер WebAPI, как и @boulier в его ответе.

Это решение основано на уже существующем классе RedirectHandler в Swashbuckle.Core.

Ответ 2

Если вы наверняка используете проект Web API, вы можете:

  • включить Http Attribute Routing,
  • создайте следующий метод в существующем или новом контроллере:
[Route(""), HttpGet]
[ApiExplorerSettings(IgnoreApi = true)]
public HttpResponseMessage RedirectToSwaggerUi()
{
    var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.Found);
    httpResponseMessage.Headers.Location = new Uri("/swagger/ui/index", UriKind.Relative);
    return httpResponseMessage;
}

Обратите внимание на использование атрибута ApiExplorerSettings, чтобы он не отображался в определении Swagger.

Ответ 3

Даже более простой вариант вышеупомянутого ответа:

public class DefaultController : Controller
{
    [Route(""), HttpGet]
    [ApiExplorerSettings(IgnoreApi = true)]
    public RedirectResult RedirectToSwaggerUi()
    {
        return Redirect("/swagger/");
    }
}

Чем проще, тем лучше! Это работает для меня.

Ответ 4

если задача позволяет, в _layout.chtml просто добавьте следующую строку в заголовок:

<meta http-equiv="refresh" content="0; URL='/swagger'"/>

это перенаправит вас на swagger/index после загрузки страницы

Ответ 5

Для .net core в свойствах launchsettings.json измените профили и разделы API, чтобы они указывали на чванство.

profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/swagger",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "authapi": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "api/swagger",
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }

Ответ 6

Измените значение launchUrl = "swagger/index.html" в launchSetting.Json в ядре asp.net 2.1/2.2

"ProjectName": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "swagger/index.html",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:44333"
    }

Ответ 7

Если у вас работает ядро dotnet, просто перейдите properties-> launchsettings.json и закомментируйте или удалите launchUrl и установите для swagger RoutePrefix значение string.Empty.