Могу ли я использовать ограничение маршрута здесь? - PullRequest
4 голосов
/ 29 августа 2011

Если у меня есть следующий URL:

/ 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 Ответ

7 голосов
/ 29 августа 2011

Вы можете написать собственный маршрут:

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