4

次の URL がある場合:

/someurl

そして、私は2つのドメイン名を持っています:

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();

誰でもアイデアはありますか?

それが理にかなっていれば、ルートトークンではなく、ドメインを介してルートを制約する方法を探していると思います。

4

1 に答える 1

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" }
    )
);
于 2011-08-29T06:20:23.013 に答える