Asp.net mvc 4 带约束的自定义管线MVC4

Asp.net mvc 4 带约束的自定义管线MVC4,asp.net-mvc-4,asp.net-routing,Asp.net Mvc 4,Asp.net Routing,我有一个MVC4应用程序,我想创建到各个控制器的自定义路由。 目标只是不在url中显示操作名称,而只显示控制器名称和参数 routes.MapRoute( “帐户”,//路由名称 “Account/{param}”,//带参数的URL 新建{controller=“Account”,action=“Account”,param=urlparmeter.Optional},//参数默认值 新的{controller=@“^(Account)$”}//参数约束 ); routes.MapRoute

我有一个MVC4应用程序,我想创建到各个控制器的自定义路由。 目标只是不在url中显示操作名称,而只显示控制器名称和参数


routes.MapRoute(
“帐户”,//路由名称
“Account/{param}”,//带参数的URL
新建{controller=“Account”,action=“Account”,param=urlparmeter.Optional},//参数默认值
新的{controller=@“^(Account)$”}//参数约束
); routes.MapRoute( “Login”,//路由名称 “Login/{returnurl}”,//带参数的URL 新建{controller=“Login”,action=“Login”,returnurl=urlparmeter.Optional},//参数默认值 新的{controller=@“^(登录)$”}//参数约束 );
routes.MapRoute( “默认值”,//路由名称 “{controller}/{action}/{id}”,//带参数的URL 新建{controller=“Home”,action=“Index”,id=UrlParameter.Optional}//参数默认值 );

目前,我正在使用这个路由,在调用每个根目录的默认参数/url中未指定的另一个操作之前,它可以正常工作

例如,Login/Login或Login/Login?somevalue的路径按预期工作,只是不在url Logn或Login/somevalue中显示操作。但是,一旦请求同一控制器中的另一个操作,路由就会解析为Login/Login/Logout(例如)。当我将路由设置为匹配登录控制器的所有请求时,为什么会发生这种情况? 控制器中的所有操作都具有returnurl参数

如果有人能花点时间查看我的路线,我们将非常感谢您对此事的解释或澄清

任何帮助或想法都会很好。
提前感谢。

请解释这句话“目前我正在使用此路由,在我调用每个根目录的默认参数/url中未指定的另一个操作之前,该路由工作正常。”哪个命名路由工作,哪个确切的uri失败?@Dave,例如登录/登录或登录/登录的路由?somevalue工作正常,不会显示url Logn或Login/somevalue中的操作。但是,一旦请求同一控制器中的另一个操作,路由就会解析为Login/Login/Logout(例如)。当我将路由设置为匹配登录控制器的所有请求时,为什么会发生这种情况?您是否总是使用名为returnurl的变量?@Dave控制器中的所有操作都具有returnurl参数

routes.MapRoute(
               "Account", // Route name
               "Account/{param}", // URL with parameters
               new { controller = "Account", action = "Account", param = UrlParameter.Optional }, // Parameter defaults
               new { controller = @"^(Account)$" } //Parameter constraints
); routes.MapRoute( "Login", // Route name "Login/{returnurl}", // URL with parameters new { controller = "Login", action = "Login", returnurl = UrlParameter.Optional }, // Parameter defaults new { controller = @"^(Login)$" } //Parameter constraints );
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults );