加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 我可以在这里使用路由约束吗?

发布时间:2020-12-16 06:29:56 所属栏目:asp.Net 来源:网络整理
导读:如果我有以下网址: /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",ac
如果我有以下网址:

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

有人有任何想法吗?

我想我有点想通过它的域来限制路由,而不是路由令牌,如果这是有道理的.

解决方法

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

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.asax中的RegisterRoutes方法中注册它:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读