asp.net-mvc – 如何在MVC2中将子域用作路由值

第一:

我确实阅读并尝试实施thisthisthat,但我完全失败了:(

我的路线是这样的:

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”]更改为子域即可.

What/How can I do this?

最佳答案 我不确定路由是否扩展到实际域名,因为域或子域不应对站点/应用程序的工作产生任何影响.

我建议在每个请求上构建自己的子域检测.这使路由和子域检测分开,有助于测试等.

这可能有所帮助:

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();
        }
点赞