我可以在这里使用路线约束吗?

时间:2011-08-29 06:11:46

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing domain-name route-constraint

如果我有以下网址:

  

/ 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" }
);

我猜是因为没有路由值,我不能基于主机限制URL?这是对的吗?

如果是这样,我怎么能这样做,除了以下(丑陋)的动作:

if (cantViewThisUrlInThisDomain)
   return new HttpNotFoundResult();

有人有任何想法吗?

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

1 个答案:

答案 0 :(得分: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();
        }
    }

然后在RegisterRoutes中的Global.asax方法中注册:

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