如何路由 Net Core 3.1 上的所有子域
How to route all subdomain on Net core 3.1
我想在用户输入子域时使用不同的控制器。我正在使用 RequireHost.
它如何适用于任何域?例如,我使用 domain.test 只是为了开发,但在生产中我有另一个。
Startup.cs
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Subdomain}/{action=Index}/{id?}").RequireHost("*.domain.test")
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
RequireHost
几乎与在任何地方添加 [Host("...")]
属性相同,只是它们只适用于该路由。
主机规则的评估似乎发生在 HostMatcherPolicy 中。应该将“*.domain.test”视为匹配所有子域,而不是域本身。如果您希望它也匹配,则需要添加“domain.test”。
但是,您确实有第二条路线可以匹配所有内容。我怀疑您需要明确列出默认路由的有效主机。或者将您的控制器分成不同的区域,以确保它们只匹配预期的规则。
我想在用户输入子域时使用不同的控制器。我正在使用 RequireHost.
它如何适用于任何域?例如,我使用 domain.test 只是为了开发,但在生产中我有另一个。
Startup.cs
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Subdomain}/{action=Index}/{id?}").RequireHost("*.domain.test")
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
RequireHost
几乎与在任何地方添加 [Host("...")]
属性相同,只是它们只适用于该路由。
主机规则的评估似乎发生在 HostMatcherPolicy 中。应该将“*.domain.test”视为匹配所有子域,而不是域本身。如果您希望它也匹配,则需要添加“domain.test”。
但是,您确实有第二条路线可以匹配所有内容。我怀疑您需要明确列出默认路由的有效主机。或者将您的控制器分成不同的区域,以确保它们只匹配预期的规则。