如何将 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;
});
如何在 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.
添加
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;
});