.net核心路由到基于当前域名的剃须刀页面区域?
Posted
技术标签:
【中文标题】.net核心路由到基于当前域名的剃须刀页面区域?【英文标题】:.net core routing to a razor pages area based on current domain name? 【发布时间】: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
我不知道如何使用剃须刀页面完成相同类型的事情。
【问题讨论】:
按区域是指asp.net mvc 区域还是只是一个子文件夹?你有机会检查aspnetboilerplate.com 或cloudscribe.com。您可以学习并适应他们已经解决的问题,而不是从头开始。 MVC 区域,在 2.1 中被添加到剃须刀页面。 mikesdotnetting.com/article/324/areas-in-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,但不知何故,中间件总是被跳过。我可以在我的服务器日志中看到正确的请求正在进来,所以肯定是我的应用程序正在改变请求字符串。以上是关于.net核心路由到基于当前域名的剃须刀页面区域?的主要内容,如果未能解决你的问题,请参考以下文章