2016-06-09 2 views
6

У меня есть проект WebApi с установленным на нем Swashbuckle.Как перенаправить с корневого URL на/swagger/ui/index?

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

+0

Вы могли решить эту проблему @ kpa6uk? – Sampada

+0

@ Сэмпада нет, я этого не делал. Я считаю, что это можно решить с помощью некоторой переадресации веб-api, а чванство - это только мое дело. Я приостановил эту задачу для дальнейших исследований. –

+0

Вы посмотрели мой ответ? Подумайте о том, чтобы маркировать его как решение, если оно помогло мне – bsoulier

ответ

15

this answer to similar question влиянием, слегка измененный код:

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 как это сделал @bsoulier в своем ответе.

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

+0

Рад, что вы указали .trim ('/') - Я пропустил это в первый раз! –

4

Если вы точно использовать проект 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.