Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果控制器操作不执行,则自定义路由';不存在mvc4_C#_Asp.net Mvc 3_Asp.net Mvc 4 - Fatal编程技术网

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匹配,因为控制器/操作不存在。