如何将 Swagger 设置为默认起始页?

How to set Swagger as default start page?

如何在 ABP 模板中将 Swagger 设置为默认起始页而不是/Account/Login

我正在使用 ASP.NET MVC 5.x + Angular 1.x.

更新

当前代码:

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

    //ASP.NET Web API Route Config
    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 }
    );
}

一切正常,除了零号模块的 "api/Account/Authenticate" 请求已中断,显示:

The resource cannot be found.

添加 routing in RouteConfig.cs 作为此处的注释:

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

    //ASP.NET Web API Route Config
    routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
        );

    // Set Swagger as default start page
    /*
    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 }
    );
}

我转到解决方案资源管理器面板 > 属性。在那里我找到了一个名为 launchsettings.json 的文件。

在这个文件中,我在找到它的所有部分中将 "launchUrl" 参数的值更改为 "swagger/index.html"。

它适合我。

我可以通过在项目属性的开始操作中填写特定页面 > /swagger/ui/index

来做到这一点

注意:我使用的是 NuGet 的 Swashbuckle

对于RESTFUL API in ASP Net Core >2.2,在Project/Properties/Debug

中设置默认值URL

在 Visual Studio、IIS Express 和 IIS 中对我来说效果很好的方法。就是创建一个控制器,内容如下:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication.Controllers
{
    /// <summary>
    /// Controller to display API documentation in Swagger format
    /// </summary>
    [Route("")]
    [ApiExplorerSettings(IgnoreApi = true)]
    public class DocsController : Controller
    {
        [Route("docs"), HttpGet]
        [AllowAnonymous]
        public IActionResult ReDoc()
        {
            return View();
        }

        [Route(""), HttpGet]
        [AllowAnonymous]
        public IActionResult Swagger()
        {
            return Redirect("~/swagger");
        }
    }
}

注意:编辑 launchsettings.json 文件在 Visual Studio 中运行良好,但坚持在 IIS 上托管应用程序时无法按预期工作。

通过这种方式,我发现它比在几个不同的位置创建大量配置更干净。

我知道主要问题是针对 ASP.Net MVC,但对于 ASP.Net Core 是一个很好的解决方案,来自这个关于类似问题的答案(使用 SwaggerUI):

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

在 Asp .Net Web Api Core 3.x 中只需执行此操作 (RoutePrefix):

        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "Baha'i Prayers API");
            c.InjectStylesheet("/swagger/custom.css");
            c.RoutePrefix = String.Empty;
        });