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

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – Asp.Net MVC – “动态”路由的最佳方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图提出一种创建“动态”路由的方法.我的意思是,我想要能够为每个命中分配一个路由的控制器和动作,而不是直接映射.

例如,路由可能看起来像这样“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方法

猜你在找的asp.Net相关文章