将子域映射到 ASP.Net Core 3 中的区域
Mapping Subdomains to Areas in ASP.Net Core 3
我想达到的目标
- 映射我的普通域,例如
example.com
如果可能,不映射到任何区域。
- 映射我的子域,例如
blog.example.com
到名为 blog
. 的区域
我发现了什么
实际上有很多关于这个主题的帖子,尤其是将子域映射到区域。
来自 SO:
- asp-net-core-mapping-subdomains-to-areas
其他:
而且可能还有更多。
问题
但是有一个大问题,在 ASP.Net Core 3 中他们改变了很多东西,其中之一是一般的路由,参见 mircosoft's devblog。基本上他们改变了它所以现在一切都应该是端点。
所有 类 例如MvcRouteHandler
和接口,例如IRouter
现在基本上已经过时了,至少从我的理解来看是这样。在 GitHub 存储库中搜索和挖掘一段时间后,我找不到任何有用的东西。
附加信息
- 我正在使用
SDK 3.0.100-preview6-012264
,但正在尝试升级到
SDK 3.0.100-preview7-012821
尽快。
- 我正在使用将请求传递给 ASP.Net 核心服务器的保留代理 (nginx)。
你说所有请求都传递给 nginx
但没有提到 nginx 重定向,你是否尝试使用 nginx
来做到这一点,只需使用 [= 将 sub-domain 重定向到域13=].
server {
server_name sub.domain.co;
location / {
return 301 $scheme://domain.co/BlogSite$request_uri;
}
}
(BlogSite
是您在 ASP.Net 核心服务器上的区域路由。)
为了更新整个情况,随着 .Net Core 3 的发布,您现在可以使用 RequireHost
方法。
这看起来像下面这样:
app.UseEndpoints(endpoints =>
{
endpoints.MapAreaControllerRoute(
name: "Home",
areaName: "Home",
pattern: "{controller=Home}/{action=Index}")
.RequireHost("localhost:5001", "sub.domain.com");
}
如果删除模式参数中的 Area
,就像示例中那样,您就可以实现这一点。它仍然有些 hacky,但干净多了。
请注意,您必须在所有端点上放置 RequireHost
才能获得正确的默认路由匹配。
我想达到的目标
- 映射我的普通域,例如
example.com
如果可能,不映射到任何区域。 - 映射我的子域,例如
blog.example.com
到名为blog
. 的区域
我发现了什么
实际上有很多关于这个主题的帖子,尤其是将子域映射到区域。
来自 SO:
- asp-net-core-mapping-subdomains-to-areas
其他:
而且可能还有更多。
问题
但是有一个大问题,在 ASP.Net Core 3 中他们改变了很多东西,其中之一是一般的路由,参见 mircosoft's devblog。基本上他们改变了它所以现在一切都应该是端点。
所有 类 例如MvcRouteHandler
和接口,例如IRouter
现在基本上已经过时了,至少从我的理解来看是这样。在 GitHub 存储库中搜索和挖掘一段时间后,我找不到任何有用的东西。
附加信息
- 我正在使用
SDK 3.0.100-preview6-012264
,但正在尝试升级到SDK 3.0.100-preview7-012821
尽快。 - 我正在使用将请求传递给 ASP.Net 核心服务器的保留代理 (nginx)。
你说所有请求都传递给 nginx
但没有提到 nginx 重定向,你是否尝试使用 nginx
来做到这一点,只需使用 [= 将 sub-domain 重定向到域13=].
server {
server_name sub.domain.co;
location / {
return 301 $scheme://domain.co/BlogSite$request_uri;
}
}
(BlogSite
是您在 ASP.Net 核心服务器上的区域路由。)
为了更新整个情况,随着 .Net Core 3 的发布,您现在可以使用 RequireHost
方法。
这看起来像下面这样:
app.UseEndpoints(endpoints =>
{
endpoints.MapAreaControllerRoute(
name: "Home",
areaName: "Home",
pattern: "{controller=Home}/{action=Index}")
.RequireHost("localhost:5001", "sub.domain.com");
}
如果删除模式参数中的 Area
,就像示例中那样,您就可以实现这一点。它仍然有些 hacky,但干净多了。
请注意,您必须在所有端点上放置 RequireHost
才能获得正确的默认路由匹配。