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

asp.net-mvc – Asp.Net MVC – “动态”路由的最佳方法

发布时间:2020-12-15 19:03:53 所属栏目:asp.Net 来源:网络整理
导读:我试图提出一种创建“动态”路由的方法.我的意思是,我想要能够为每个命中分配一个路由的控制器和动作,而不是直接映射. 例如,路由可能看起来像这样“path / {object}”,并且当该路径被命中时,执行查找,提供适当的控制器/动作来进行调用. 我已经尝试发现创建自
我试图提出一种创建“动态”路由的方法.我的意思是,我想要能够为每个命中分配一个路由的控制器和动作,而不是直接映射.

例如,路由可能看起来像这样“path / {object}”,并且当该路径被命中时,执行查找,提供适当的控制器/动作来进行调用.

我已经尝试发现创建自定义路由处理程序的机制,但是文档/可发现性在某种程度上是有点阴影的(我知道,它的beta – 我不会再期望).虽然,我不知道甚至最好的方法,甚至控制器工厂,甚至执行所有映射的默认控制器/动作可能是最好的路线(不是双关语).

任何建议将不胜感激.

解决方法

您可以随时使用所有语法(我不知道名称是否正确).

路线:

routeTable.MapRoute(
“路径”,
“{*路径}”,
new {controller =“Pages”,action =“Path”});

控制器动作定义为:
public ActionResult Path(string path)

在控制器的动作中,您将拥有一条路径,因此只需将其分散并分析即可.

要调用另一个控制器,您可以使用RedirectToAction(我认为这是更正确的方法).通过重定向,您可以为其设置永久重定向.
或使用类似的东西:

internal class MVCTransferResult : RedirectResult
    {
        public MVCTransferResult(string url) : base(url) 
        {
        }
        public MVCTransferResult(object routeValues) 
                : base(GetRouteURL(routeValues))
        {
        }

        private static string GetRouteURL(object routeValues)
        {
            UrlHelper url = new UrlHelper(
                new RequestContext(
                        new HttpContextWrapper(HttpContext.Current),new RouteData()),RouteTable.Routes);
            return url.RouteUrl(routeValues);
        }

        public override void ExecuteResult(ControllerContext context)
        {
            var httpContext = HttpContext.Current;

            // ASP.NET MVC 3.0
            if (context.Controller.TempData != null &&
                context.Controller.TempData.Count() > 0)
            {
                throw new ApplicationException(
                     "TempData won't work with Server.TransferRequest!");
            }
            // change to false to pass query string parameters 
            // if you have already processed them
            httpContext.Server.TransferRequest(Url,true);

            // ASP.NET MVC 2.0
            //httpContext.RewritePath(Url,false);
            //IHttpHandler httpHandler = new MvcHttpHandler();
            //httpHandler.ProcessRequest(HttpContext.Current);
        }
    }

但是这种方法需要在IIS或IIS上运行Expres Casinni不支持Server.Transfer方法

(编辑:李大同)

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

    推荐文章
      热点阅读