MVC 4包罗万象的路线从未达到过

编程入门 行业动态 更新时间:2024-10-10 17:30:10
本文介绍了MVC 4包罗万象的路线从未达到过的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

当试图建立一个包罗万象的MVC 4所有航线(这是我发现的几个例子,并根据我的code)它返回一个404错误。我在IIS 7.5上运行此。这似乎是一个简单的解决方案,所以我缺少什么?

一个说明,如果我移动默认的路线上面的包罗万象的路线它的作品。但当然再没有其它控制器都曾经达到。

下面是code:

Route.Config:

routes.MapRoute(            名称:默认,            网址:{控制器} / {行动} / {ID}            默认:新{控制器=家,行动=索引,ID = UrlParameter.Optional}        );        routes.MapRoute(            包罗万象,            {*} dynamicRoute            新{控制器=包罗万象,行动=ChoosePage}        );

控制器:

公共类CatchAllController:控制器{    公众的ActionResult ChoosePage(字符串dynamicRoute)    {        ViewBag.Path = dynamicRoute;        返回查看();    }}

解决方案

由于创建包罗万象路线的最终目标是要能够处理动态URL和我无法找到上述直接回答原来的问题,我从不同的角度来处理我的研究。在这方面,我碰到这个博客帖子就来了:自定义404时,没有路由匹配

该解决方案允许一个给定的URL中的多个部分的处理(即www.mysite/this/is/a/dynamic/route)

下面是最后的定制控制器code:

公众覆盖一个IController CreateController(System.Web.Routing.RequestContext的RequestContext,串controllerName) {     如果(RequestContext的== NULL)     {         抛出新的ArgumentNullException(RequestContext的);     }     如果(String.IsNullOrEmpty(controllerName))     {         抛出新的ArgumentException(MissingControllerName);     }     VAR controllerType = GetControllerType(RequestContext的,controllerName);     //这是通常会返回一个404     //与路线包罗万象控制器替换     如果(controllerType == NULL)     {        //建立与各阶层的动态路径变量        VAR dynamicRoute =的string.join(/,requestContext.RouteData.Values​​.Values​​);        //路线全部接收控制器        controllerName =包罗万象;        controllerType = GetControllerType(RequestContext的,controllerName);        requestContext.RouteData.Values​​ [控制器] = controllerName;        requestContext.RouteData.Values​​ [行动] =ChoosePage;        requestContext.RouteData.Values​​ [dynamicRoute] = dynamicRoute;     }     一个IController控制器= GetControllerInstance(RequestContext的,controllerType);     返回控制器; }

When attempting to create a catch all route in MVC 4 (something I've found several examples of, and based my code on) it returns a 404 error. I'm running this on IIS 7.5. This seems like a straight forward solution, so what am I missing?

One note, if I move the "CatchAll" route above the "Default" route it works. But of course then none of the other controllers are ever reached.

Here is the code:

Route.Config:

routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); routes.MapRoute( "CatchAll", "{*dynamicRoute}", new { controller = "CatchAll", action = "ChoosePage" } );

Controller:

public class CatchAllController : Controller { public ActionResult ChoosePage(string dynamicRoute) { ViewBag.Path = dynamicRoute; return View(); } }

解决方案

Since the ultimate goal of creating the catchall route was to be able to handle dynamic urls and I was unable to find a direct answer to the original issue above, I approached my research from a different perspective. In doing so I came across this blog post: Custom 404 when no route matches

This solution allows handling of multiple sections within a given url (i.e. www.mysite/this/is/a/dynamic/route)

Here is the final custom controller code:

public override IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName) { if (requestContext == null) { throw new ArgumentNullException("requestContext"); } if (String.IsNullOrEmpty(controllerName)) { throw new ArgumentException("MissingControllerName"); } var controllerType = GetControllerType(requestContext, controllerName); // This is where a 404 is normally returned // Replaced with route to catchall controller if (controllerType == null) { // Build the dynamic route variable with all segments var dynamicRoute = string.Join("/", requestContext.RouteData.Values.Values); // Route to the Catchall controller controllerName = "CatchAll"; controllerType = GetControllerType(requestContext, controllerName); requestContext.RouteData.Values["Controller"] = controllerName; requestContext.RouteData.Values["action"] = "ChoosePage"; requestContext.RouteData.Values["dynamicRoute"] = dynamicRoute; } IController controller = GetControllerInstance(requestContext, controllerType); return controller; }

更多推荐

MVC 4包罗万象的路线从未达到过

本文发布于:2023-11-28 08:46:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1641722.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:包罗万象   路线   MVC

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!