【问题标题】:How can host name be included in MVC2 route mapping?主机名如何包含在 MVC2 路由映射中?
【发布时间】:2010-11-18 14:57:50
【问题描述】:

我有 3 个域名都指向同一个 MVC2 应用程序。我现在所拥有的是 homecontroller 充当交通警察并重定向到特定主机名的控制器和视图。但我不喜欢这导致的 URI 结果...

例如: www.webhost1.com/webhost1/imagegallery www.webhost2.com/webhost2/imagegallery

我希望拥有:

www.webhost1.com/imagegallery

有没有办法在 global.asax 中定义在路由评估中包含主机名的路由,以使 URI 看起来不那么冗余?

【问题讨论】:

    标签: asp.net-mvc-2


    【解决方案1】:

    啊哈!,这花了一些时间(以及旧书的巅峰),但我想我已经解决了。

    您需要创建自定义路由约束。 这是我快速制作的:

     public class hostnameConstraint : IRouteConstraint
        {
            protected string _hostname;
    
            public hostnameConstraint (string hostname)
            {
                _hostname = hostname;
            }
    
            bool IRouteConstraint.Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
            {
                if (httpContext.Request.Url.Host == _hostname)
                    return true;
                return false;
            }
        }
    

    然后您只需将其添加到您的路由并指定您希望路由应用到哪个主机名。像这样:

    routes.MapRoute(
                "ImageGallery", "{controller}/{action}",
                new { controller = "Home", action = "Index"},
                new { hostname = new hostnameConstraint("webhost1.com") }
            );
    
    routes.MapRoute(
                "ImageGallery", "{controller}/{action}",
                new { controller = "Home", action = "Index"},
                new { hostname = new hostnameConstraint("webhost2.com") }
            );
    

    等等等等。我不知道您的路线是如何布置的,但关键是现在您可以为主机名设置单独的路线。这应该能让你做你想做的事。

    【讨论】:

    • 您先生是我的英雄!我刚刚对此进行了测试,它运行良好。
    • 这太棒了。正是我要找的。我正在创建一个可以托管域重定向的站点。我希望该站点管理域以及重定向。添加具有此约束的路由允许我在主机域下拥有正常站点,并且任何其他域都将相应地重定向。谢谢!
    猜你喜欢
    • 2011-03-26
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2016-05-07
    相关资源
    最近更新 更多