Comment utiliser Swagger comme page D'accueil de IAppBuilder dans WebAPI

j'essaie d'utiliser Swagger avec Microsoft WebAPI 2.

pour le moment, j'ai l'appel suivant dans une méthode.

appBuilder
   .ConfigureOAuth()
   .UseWebApi(configuration)
   .UseWelcomePage();

Si je veux utiliser Swagger, je dois utiliser cette url "https://localhost:44300/swagger " lequel fonctionne très bien.

je veux que ma page d'accueil redirige vers l'url de mon arrogance, peut-être comme suit, mais cet exemple ne fonctionne pas.

    appBuilder
       ...
       .UseWelcomePage("/swagger");

une idée ?

22
demandé sur Philippe Matray 2015-05-04 14:14:52

9 réponses

j'ai obtenu ce fonctionnement comme je voulais en ajoutant une route dans RouteConfig.cs comme suit:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapHttpRoute(
            name: "swagger_root", 
            routeTemplate: "", 
            defaults: null, 
            constraints: null,
            handler: new RedirectHandler((message => message.RequestUri.ToString()), "swagger"));

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }

voir ce code de swashbuckle pour voir ce qui se passe: https://github.com/domaindrivendev/Swashbuckle/blob/master/Swashbuckle.Core/Application/RedirectHandler.cs

41
répondu patrickbadley 2016-05-24 14:48:35

au Démarrage.fichier cs dans la méthode de Configuration (application IAppBuilder) j'ai utilisé cette ligne de code pour la rediriger vers la page d'accueil de swagger.

app.Run(async context => { 
    context.Response.Redirect("swagger/ui/index"); 
}); 

donc la méthode complète que j'utilise est la suivante

[assembly: OwinStartup(typeof(AtlasAuthorizationServer.Startup))]
namespace AtlasAuthorizationServer
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);

            HttpConfiguration config = new HttpConfiguration();
            WebApiConfig.Register(config);
            app.UseWebApi(config);

            app.Run(async context => {
                context.Response.Redirect("swagger/ui/index");
            });
        }
    }
}

notez que cela va causer un avertissement vert dans visual studio. Je suis sûr qu'il y a un moyen d'imiter ceci comme asynchrone avec un appel d'attente dans la fonction.

11
répondu Brad LaPratt 2016-03-29 19:29:43

Pour Asp.Net utilisation principale:

app.Run(context => {
            context.Response.Redirect("swagger/ui");
            return Task.CompletedTask;
        });
6
répondu Rui Eusebio 2017-07-01 03:33:48

Ok, voici une façon de le faire. Ajouter un nouveau contrôleur MVC (Not Web API) e.g HomeController et dans l'action Index ajoutez le code suivant:

using System.Web.Mvc;

namespace Kids.Math.Api.Controllers
{
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return new RedirectResult("~/swagger/ui/index");
    }


}

}

aussi, assurez-vous que votre config route a le suivant (Notez, par défaut il le fait déjà)

        public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
4
répondu user1829319 2015-07-11 03:21:25

j'ai eu le même problème et je l'ai résolu en personnalisant l'url de SwaggerUI. Voici ma méthode de Configuration:

public void Configuration(IAppBuilder app)
{
    var thisAssembly = typeof (Startup).Assembly;

    HttpConfiguration httpConfig = new HttpConfiguration();

    app.MapHttpAttributeRoutes();
    app.UseCors(CorsOptions.AllowAll);
    app.UseWebApi(httpConfig);

    httpConfig
        .EnableSwagger("api/{apiVersion}",c =>
        {
            c.IncludeXmlComments(string.Format(@"{0}\bin\Docs.xml", AppDomain.CurrentDomain.BaseDirectory));
            c.SingleApiVersion("v1", "My API");
        })
        .EnableSwaggerUi("{*assetPath}",c =>
        {
            c.CustomAsset("index", thisAssembly, "AspNetIdentity.WebApi.DocsAssets.index.html");
        });

    httpConfig.Routes.First(x => x.RouteTemplate == "{*assetPath}").Defaults["assetPath"] = "index";
}

de Cette façon, lorsque Vous accédez à localhost:44300 Vous obtiendrez Swagger UI comme page de démarrage.

2
répondu Misiu 2016-04-07 12:54:41

vous pouvez configurer un routage dans votre objet de configuration. Difficile de donner tous les détails car votre code est limité. Espérons que cela vous mènera dans la bonne direction.

1
répondu Frank Witte 2015-05-04 12:18:28

dans ASP.NET Core, vous pouvez simplement changer le RoutePrefix lors de L'enregistrement de SwaggerUI en chaîne vide.

app.UseSwaggerUI(c =>
{
    c.RoutePrefix = "";
    ...
};

aucune configuration de redirection REQUISE, sauf si vous voulez toujours /swagger ou quelque chose de semblable dans le chemin.

1
répondu Adrian 2018-05-02 05:26:48

pour ASP.NET noyau la requête pull suivante a été créée: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/pull/486

En attendant, la solution de contournement suivante peut être utilisée:

public static IApplicationBuilder UseSwaggerUI(
        this IApplicationBuilder app,
        Action<SwaggerUIOptions> setupAction)
    {
        var options = new SwaggerUIOptions();
        setupAction?.Invoke(options);

        // This method reads an internal property value 
        // http://dotnetfollower.com/wordpress/2012/12/c-how-to-set-or-get-value-of-a-private-or-internal-property-through-the-reflection/
        var indexSettings = options.GetPropertyValue<IndexSettings>("IndexSettings");
        // Serve swagger-ui assets with the FileServer middleware, using a custom FileProvider
        // to inject parameters into "index.html"
        var fileServerOptions = new FileServerOptions
        {
            RequestPath = string.IsNullOrWhiteSpace(options.RoutePrefix) ? string.Empty : $"/{options.RoutePrefix}",
            FileProvider = new SwaggerUIFileProvider(indexSettings.ToTemplateParameters()),
            EnableDefaultFiles = true,
            StaticFileOptions =
            {
                ContentTypeProvider = new FileExtensionContentTypeProvider()
            }
        };
        app.UseFileServer(fileServerOptions);

        return app;
    }

Cheers

0
répondu Guilherme Duarte 2017-09-13 16:44:13

.Net de Base, il suffit d'ouvrir les Propriétés de l'application, accédez à l'onglet Débogage, et écrire Swagger dans le "Lancer le navigateur" zone de texte

lancer le navigateur

0
répondu kristian aranda 2018-06-26 13:56:58