【问题标题】:Subdomain routing in ASP.NET Core 3.0 RazorPagesASP.NET Core 3.0 RazorPages 中的子域路由
【发布时间】: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


    【解决方案1】:

    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}");
            });
        } 
    

    【讨论】:

    • 剃须刀页面也使用app.UseMvc,所以配置必须类似。
    • available 你也可以考虑重写 RouteHandler 类。但我没试过
    • @DervişKayımbaşıoğlu,感谢您的回答。在我的项目中,我正在开发一个多租户网站,我需要拒绝无法识别的租户,这样如果在数据库中找不到租户,页面就会返回错误,MvcRouteHandler 也适合吗?
    • .NET 5 中的 MvcRouteHandler:raw.githubusercontent.com/aspnet/Mvc/master/src/…
    猜你喜欢
    • 2020-05-01
    • 2021-12-29
    • 2020-05-29
    • 2021-05-04
    • 2022-10-24
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2016-03-23
    相关资源
    最近更新 更多