【问题标题】:.net core routing to a razor pages area based on current domain name?.net核心路由到基于当前域名的剃须刀页面区域?
【发布时间】:2019-03-03 23:07:35
【问题描述】:

我目前正在尝试构建一个应用程序以从单个 .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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 我只是遇到了完全相同的问题,中间件在调试模式下工作正常,但在部署到我的服务器时不起作用。我有 2 个域指向同一个服务器 IP,但不知何故,中间件总是被跳过。我可以在我的服务器日志中看到正确的请求正在进来,所以肯定是我的应用程序正在改变请求字符串。
猜你喜欢
  • 2022-01-07
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 2019-09-16
  • 1970-01-01
  • 2019-01-19
  • 2017-05-03
相关资源
最近更新 更多