如何在WebAPI中使用Swagger作为IAppBuilder的欢迎页面

Phi*_*ray 28 swagger katana asp.net-web-api2

我尝试将Swagger与Microsoft WebAPI 2 一起使用.

目前,我在一个方法中进行了以下调用.

appBuilder
   .ConfigureOAuth()
   .UseWebApi(configuration)
   .UseWelcomePage();
Run Code Online (Sandbox Code Playgroud)

如果我想使用Swagger,我必须使用这个URL" https:// localhost:44300/swagger "哪一个非常好用.

我希望我的主页重定向到我的招摇的网址,也许如下,但这个示例不起作用.

    appBuilder
       ...
       .UseWelcomePage("/swagger");
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?

pat*_*ley 52

通过在RouteConfig.cs中添加路由,我得到了我想要的工作方式:

    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 }
        );
    }
Run Code Online (Sandbox Code Playgroud)

从swashbuckle看到这个代码,看看发生了什么:https://github.com/domaindrivendev/Swashbuckle/blob/master/Swashbuckle.Core/Application/RedirectHandler.cs


小智 16

在Configuration(IAppBuilder应用程序)方法的Startup.cs文件中,我使用这行代码使其在加载时重定向到swagger欢迎页面.

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

所以我使用的完整方法如下

[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");
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这将在visual studio中引发绿色警告.我确信有一些方法可以模仿这与函数中的await调用异步.

  • 这是最精简的选择.与此处的其他答案不同,它不需要您添加`System.Web.Mvc`. (2认同)

小智 9

对于Asp.Net核心使用此:

app.Run(context => {
            context.Response.Redirect("swagger/ui");
            return Task.CompletedTask;
        });
Run Code Online (Sandbox Code Playgroud)

  • 在最新版本中,我只是重定向到“ swagger”而不是“ swagger / ui”-虽然可以使用。 (2认同)

小智 6

如果您来这里寻找 asp.net core 2 的答案,您可以通过将 RoutePrefix 的 swagger 设置为应用程序根目录来实现相同的效果

app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My service");
                c.RoutePrefix = string.Empty;  // Set Swagger UI at apps root
            });
Run Code Online (Sandbox Code Playgroud)

如何在 Asp.Net Core 2.x 中将 root 重定向到 swagger?


use*_*319 5

好的,这是一种方法。添加一个新的MVC控制器(非Web API),例如HomeController,并在Index操作中添加以下代码:

using System.Web.Mvc;

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


}
Run Code Online (Sandbox Code Playgroud)

}

另外,请确保您的路由配置具有以下内容(注意,默认情况下已经包含)

        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 }
        );
    }
Run Code Online (Sandbox Code Playgroud)


Adr*_*ian 5

在 ASP.NET Core 中,您可以在将 SwaggerUI 注册为空字符串时简单地更改 RoutePrefix。

app.UseSwaggerUI(c =>
{
    c.RoutePrefix = "";
    ...
};
Run Code Online (Sandbox Code Playgroud)

不需要重定向配置,除非您仍然想要/swagger或路径中的类似内容。

  • 为了澄清@mc01 所说的内容,如果您将 Web API 托管在虚拟目录中,则此答案将不起作用。如果这不是您的用例(即您在 IIS 中部署到它自己的网站,或者在 Azure 中部署到它自己的应用服务),那么这个答案非常有效。 (3认同)

归档时间:

查看次数:

24997 次

最近记录:

5 年,10 月 前