【问题标题】:How to use a SubDomain as Route Value in MVC2如何在 MVC2 中使用子域作为路由值
【发布时间】:2011-05-12 03:37:40
【问题描述】:

第一:

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

我的路线是这样的:

routes.MapRoute(
    "DefaultRoute",
    "{calurl}/{controller}/{action}/{id}",
    new { calurl = "none", controller = "Subscriber", action = "Index", id = UrlParameter.Optional }
);

我正在尝试使用 as

"{calurl}.domain.com",
"{controller}/{action}/{id}"

因此路由值calurl 将始终来自子域。

我可以有如下链接:

http://demo.domain.com/Subscriber/Register

从今天开始

http://domain.com/demo/Subscriber/Register

我的尝试

我尝试使用上面链接的示例创建自己的CustomRoute(全部 3 个,一次一个),但我最终总是搞砸了所有事情。

我一直在想,只是将RouteValue["calurl"] 更改为子域就需要很多代码。

什么/我该怎么做?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2 routes asp.net-mvc-routing


    【解决方案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();
            }
    

    【讨论】:

    • 测试很简单,只需使用您喜欢的任何子域(如demo.localhost)更新hosts 文件:)
    • 确实,我认为我的主要观点是将域检测与路由分开,我发现这很有用。
    【解决方案2】:

    如果您有 IIS7,为什么不使用 URL 重写规则?

    这可能比用你的路由做黑客工作更好,而 IIS 会做它最擅长的事情。

    大概是这样的:

    <rule name="rewriteSubdomains" stopProcessing="true">
      <match url="(.*).domain.com/(.*)" />
      <action type="Rewrite" url="domain.com/{R:1}/{R:2}" />
    </rule>
    

    这样,您的路由将正确处理子域,因为它以不同的方式进入应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 2021-03-26
      • 2017-04-15
      • 2013-09-01
      • 2014-02-15
      • 2011-10-20
      • 2011-05-31
      相关资源
      最近更新 更多