Как перенаправить с корневого 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, вы можете:
[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.