1

我有一个托管在服务器上的站点,它有一个子域。在我的 Global.asax.cs 中,我的地图路线如下

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "ShoppingCart", action = "Index", 
        id = UrlParameter.Optional }
);

当我访问 mysite.mydomain.com 之类的站点子域时,我希望将其重定向到类似的子域

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "mySiteController", action = "Index", 
        id = UrlParameter.Optional }
);

但我无法做到这一点。如何根据访问的 url 从 Global.asax.cs 有条件地路由

提前致谢。

塔拉克

4

2 回答 2

2

尝试这个

routes.Add("DomainRoute", new DomainRoute( 
    "{Controller}.example.com", // Domain with parameters 
    "{action}/{id}",    // URL with parameters 
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults 
))

有关更多信息,请查看ASP.NET MVC 域路由链接

于 2013-09-03T06:37:58.607 回答
1

您还可以为此场景创建自定义路由约束:

public class DomainRouteConstraint : IRouteConstraint {
    string _host;

    public DomainRouteConstraint(string host) {
        _host = host;
    }

    public bool Match(HttpContextBase httpContext, 
                          Route route, 
                          string parameterName,        
                          RouteValueDictionary values, 
                          RouteDirection routeDirection) {
        return _host.Equals(httpContext.Request.Url.Host,
                            StringComparison.InvariantCultureIgnoreCase);
    }
}

然后在您的路线中使用约束:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters*
    new { controller = "mySiteController", 
          action = "Index", 
          id = UrlParameter.Optional}, // defaults
    new DomainRouteConstraint("mysite.mydomain.com")); // constraint

或(在一条路线中使用多个约束):

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters*
    new { controller = "mySiteController", 
          action = "Index", 
          id = UrlParameter.Optional}, // defaults
    new { ignored = DomainRouteConstraint("mysite.mydomain.com"), 
          /* add more constraints here ... */ }); // constraints
于 2013-09-03T22:32:50.037 回答