C# 如果控制器操作不执行,则自定义路由';不存在mvc4
我希望发生的是,如果用户导航到C# 如果控制器操作不执行,则自定义路由';不存在mvc4,c#,asp.net-mvc-3,asp.net-mvc-4,C#,Asp.net Mvc 3,Asp.net Mvc 4,我希望发生的是,如果用户导航到控制器操作页面,如主页/索引,并且操作存在,然后继续正常操作。但是,如果用户导航到一个不存在的控制器操作主页/NotExist,那么我想将其默认为一个名为MyController的“默认”控制器 我尝试在接受*url* routes.MapRoute( "CustomRoute", "{*url}", new { controller = "MyC
控制器操作
页面,如主页/索引
,并且操作存在,然后继续正常操作。但是,如果用户导航到一个不存在的控制器操作主页/NotExist
,那么我想将其默认为一个名为MyController
的“默认”控制器
我尝试在接受*url*
routes.MapRoute(
"CustomRoute",
"{*url}",
new { controller = "MyController", action = "MySingleAction" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
但是Home/Index
将转到CustomRoute,而不是默认路径
N.B我尝试将路由放在后面,但它抛出了一个错误您应该让自定义路由成为定义的最后一个路由。在这种情况下:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"CustomRoute",
"{*url}",
new { controller = "MyController", action = "MySingleAction" }
);
请看一看,特别是404错误的处理。您应该能够路由到默认控制器/操作。这边走。@Syneryx-谢谢,所以我必须抛出404异常?MVC应该在抛出异常之前尝试映射路由。据我所知,在尝试访问错误的URL时,MVC默认会抛出404。问题是,任何带有两个名称/something/else的路由都会将第一个路由与params controller“something”和action“else”匹配,即使这样的控制器/操作不存在。路由不够智能,无法查看参数是否有意义。他们所做的只是模式匹配。因此,第一个路由可能与自定义URL和404匹配,因为控制器/操作不存在。