J'ai un projet WebApi avec Swashbuckle installé dessus.
Dans la configuration par défaut, je dois ouvrir le navigateur http://localhost:56131/swagger/ui/index
pour afficher la description de mes opérations et la page de test. Je veux qu'il soit accessible depuis la racine du site: http://localhost:56131/
. Comment puis-je atteindre cet objectif?
Influencé par cette réponse à une question similaire , code légèrement modifié:
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);
}
}
De cette manière, il n'est pas nécessaire de créer un nouveau contrôleur WebAPI, contrairement à @bsoulier dans sa réponse.
Cette solution est basée sur la classe RedirectHandler
déjà existante dans Swashbuckle.Core
Assembly.
Si vous utilisez bien un projet API Web, vous pouvez:
[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;
}
Notez l'utilisation de l'attribut ApiExplorerSettings
, afin qu'il n'apparaisse pas dans la définition de Swagger.
Variante encore plus simple de la réponse ci-dessus:
public class DefaultController : Controller
{
[Route(""), HttpGet]
[ApiExplorerSettings(IgnoreApi = true)]
public RedirectResult RedirectToSwaggerUi()
{
return Redirect("/swagger/");
}
}
Plus c'est simple, mieux c'est! Celui-ci fonctionne pour moi.
Changer la valeur de launchUrl = "swagger/index.html"
dans launchSetting.Json dans asp.net core 2.1/2.2
"ProjectName": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "swagger/index.html",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:44333"
}
Pour .net core
dans les propriétés launchsettings.json, modifiez les profils et les sections api pour qu'ils pointent sur swagger.
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"
}
si la tâche vous le permet, dans _layout.chtml, ajoutez simplement la ligne suivante à la tête:
<meta http-equiv="refresh" content="0; URL='/swagger'" />
cela vous redirigera sur swagger/index après le chargement de la page