【发布时间】:2019-05-17 02:44:24
【问题描述】:
我正在使用带有剃须刀页面的 ASP.NET Core 3.0,我想将 sub1.test.local 路由到 Pages/Sub1 并将 sub2.test.local 路由到 Pages/Sub2。我尝试创建自定义页面约定,但这与 MVC 路由完全不同,所以我在这里问。
【问题讨论】:
标签: c# asp.net-core razor-pages asp.net-core-3.0
我正在使用带有剃须刀页面的 ASP.NET Core 3.0,我想将 sub1.test.local 路由到 Pages/Sub1 并将 sub2.test.local 路由到 Pages/Sub2。我尝试创建自定义页面约定,但这与 MVC 路由完全不同,所以我在这里问。
【问题讨论】:
标签: c# asp.net-core razor-pages asp.net-core-3.0
Michael Graf 已经发布了关于此的帖子。
您首先需要通过覆盖 MvcRouteHandler 创建自定义路由器,然后您需要在您的 Mvc 路由配置中使用此路由器类。
public class AreaRouter : MvcRouteHandler, IRouter
{
public new async Task RouteAsync(RouteContext context)
{
string url = context.HttpContext.Request.Headers["HOST"];
string firstDomain = url.Split('.')[0];
string subDomain = char.ToUpper(firstDomain[0]) + firstDomain.Substring(1);
string area = subDomain;
context.RouteData.Values.Add("area", subDomain);
await base.RouteAsync(context);
}
}
在启动配置中,
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseMvc(routes =>
{
routes.DefaultHandler = new AreaRouter();
routes.MapRoute(name: "areaRoute",
template: "{controller=Home}/{action=Index}");
});
}
【讨论】:
MvcRouteHandler 也适合吗?