4

如果我有以下网址:我可以在这里使用路线约束吗?

/someurl

,我有两个域名:

us.foo.com

au.foo.com

我想这200(匹配):

us.foo.com/someurl

但是这404(不匹配):

au.foo.com/someurl

的路线是这样的:

RouteTable.Routes.MapRoute(
    "xyz route", 
    "someurl", 
    new { controller = "X", action = "Y" } 
); 

我猜是因为没有路由值,我不能约束基于主机上的网址是什么?那是对的吗?

如果是这样,我怎么能做到这一点,在动作比下面的(丑陋的)其他:

if (cantViewThisUrlInThisDomain) 
    return new HttpNotFoundResult(); 

任何人有什么想法?

我想我是寻找一种方法来通过它的域来限制路由,而不是路由令牌,如果这是有道理的。

回答

7

你可以写一个自定义路由:

public class MyRoute : Route 
    { 
     public MyRoute(string url, object defaults) 
      : base(url, new RouteValueDictionary(defaults), new MvcRouteHandler()) 
     { } 

     public override RouteData GetRouteData(HttpContextBase httpContext) 
     { 
      var url = httpContext.Request.Url; 
      if (!IsAllowedUrl(url)) 
      { 
       return null; 
      } 
      return base.GetRouteData(httpContext); 
     } 

     private bool IsAllowedUrl(Uri url) 
     { 
      // TODO: parse the url and decide whether you should allow 
      // it or not    
      throw new NotImplementedException(); 
     } 
    } 

,然后在Global.asaxRegisterRoutes方法进行注册:

routes.Add(
    "xyz route", 
    new MyRoute(
     "{someurl}", 
     new { controller = "Home", action = "Index" } 
    ) 
); 
+0

不错!以前没做过(不需要)。将试试... – RPM1984

+1

黄金杰里。金。 – RPM1984

相关问题