.net核心基于当前域名路由到剃须刀页面区域?

时间:2018-09-28 01:26:13

标签: routing routes .net-core asp.net-mvc-areas razor-pages

我目前正在尝试构建一个应用程序,以从一个.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下看到关于我们的页面。

我一直在搜索数小时,但无法弄清楚如何使用剃须刀页面区域功能来完成此操作。我能找到的唯一信息是如何使用带有香草MVC的区域完成此操作。

这是一个很好的例子。

Different domain in the same app ASP.NET Core 2.0

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

1 个答案:

答案 0 :(得分:3)

我不确定使用Areas的可扩展性如何,但是您可以使用中间件来识别域并基于该域提供内容,例如“ 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等)也位于相应的区域。