Comment rediriger depuis l'url racine vers /swagger/ui/index ?

Comment rediriger depuis l'url racine vers /swagger/ui/index ?

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 façon, il n'est pas nécessaire de créer un nouveau contrôleur WebAPI comme l'a fait @bsoulier dans sa réponse.

Cette solution est basée sur la classe RedirectHandler déjà existante en Swashbuckle.Core assemblage.


Si vous utilisez certainement un projet d'API Web, vous pouvez :

  • activer le routage des attributs HTTP,
  • créez la méthode suivante dans un contrôleur existant ou nouveau :
[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 ApiExplorerSettings pour qu'il n'apparaisse pas dans la définition 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.