第一
我确实已阅读并试图实施this和this以及that,但我完全失败了:(
我的路线如下:
routes.MapRoute(
"DefaultRoute",
"{calurl}/{controller}/{action}/{id}",
new { calurl = "none", controller = "Subscriber", action = "Index", id = UrlParameter.Optional }
);
我试图用作
"{calurl}.domain.com",
"{controller}/{action}/{id}"
因此路由值calurl
将始终来自子域。
我可以拥有以下链接:
http://demo.domain.com/Subscriber/Register
截至今天我已经
了http://domain.com/demo/Subscriber/Register
我尝试了什么
我尝试使用上面链接的示例创建我自己的CustomRoute
(所有3个,一次一个),我最终总是搞砸一切。
并且我一直在想,只需要将RouteValue["calurl"]
更改为子域即可获得更多代码。
什么/我该怎么做?
答案 0 :(得分:1)
我不确定路由是否扩展到实际域名,因为域或子域不应对网站/应用程序的工作产生任何影响。
我建议在每个请求上构建自己的子域检测。这使路由和子域检测分开,有助于测试等。
这可能有所帮助:
public static string GetSubDomain()
{
string subDomain = String.Empty;
if (HttpContext.Current.Request.Url.HostNameType == UriHostNameType.Dns)
{
subDomain = Regex.Replace(HttpContext.Current.Request.Url.Host, "((.*)(\\..*){2})|(.*)", "$2").Trim().ToLower();
}
if (subDomain == String.Empty)
{
subDomain = HttpContext.Current.Request.Headers["Host"].Split('.')[0];
}
return subDomain.Trim().ToLower();
}
答案 1 :(得分:1)
如果您有IIS7,为什么不使用URL重写规则?
这可能比使用您的路由进行黑客攻击更好,IIS会做它最擅长的事情。
可能是这样的:
<rule name="rewriteSubdomains" stopProcessing="true">
<match url="(.*).domain.com/(.*)" />
<action type="Rewrite" url="domain.com/{R:1}/{R:2}" />
</rule>
这样,您的路线就会正确处理子域名,因为它会以不同的方式进入应用程序。