首页 > 解决方案 > .net核心路由到基于当前域名的剃须刀页面区域?

问题描述

我目前正在尝试构建一个应用程序以从单个 .net 核心应用程序托管多个网站。

理想情况下,我想根据访问应用程序的域名显示完全不同的 Razor 页面。

理想情况下,我希望将我的剃须刀页面分解为多个区域,每个区域与不同的域名相关联。IE www.domain1.com 是 domain1 区域,www.domain2.com 是 domain2 区域,每个区域都有自己的页面索引等。

因此,如果有人从 www.domain1.com/aboutus 访问该应用程序,它会将他们定向到位于我的应用程序的 Area/Domain1/Pages/AboutUs 部分的剃须刀页面。

同样,如果我的应用程序收到对 www.domain2.com/aboutus 的请求,他们会看到位于 Area/Domain2/Pages/Aboutus 下的关于我们页面。

我一直在寻找几个小时,我无法弄清楚你是如何使用剃须刀页面区域功能来实现的。我能找到的唯一信息是如何使用带有 vanilla MVC 的区域来实现这一点。

这是一个很好的例子。

同一个应用程序中的不同域 ASP.NET Core 2.0

我不知道如何使用剃须刀页面完成相同类型的事情。

标签: routingroutes.net-coreasp.net-mvc-areasrazor-pages

解决方案


我不确定使用区域的可扩展性如何,但是您可以使用中间件来识别域并基于该区域提供来自区域的内容,例如,其中“bloggs”是bloggs.com域的区域名称:

public class AreaRoutingMiddleware
{
    private readonly RequestDelegate _next;

    public AreaRoutingMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        if(context.Request.Host.ToString() == "bloggs.com")
        {
            context.Request.Path = "/bloggs" + context.Request.Path;
        }
        await _next.Invoke(context);
    }
}

您可能还需要添加对文件类型的检查,除非所有文件(css、js、favicon 等)也位于相应的区域中。


推荐阅读