在我的MVC2应用程序中,我有一个继承自AccountController
的{{1}}类。我想实现以下目标:当用户尝试打开时,应调用Controller
Account/Payments/NewPayment
方法。
我添加了以下路线:
AccountController.ExecuteNewPayment()
但是当我尝试请求上面的路径时,我收到带有“请求的URL”routes.MapRoute(
@"CreateNewRuntime",
@"{langId}/Account/Payments/NewPayment/{whatever}",
new { langId = @"default", controller = @"Account", action = @"ExecuteNewPayment"});
的HTTP 404错误消息,当我在调试器下执行此操作时会出现异常
System.Web.Mvc.dll中出现'System.Web.HttpException'类型的第一次机会异常 附加信息:未找到路径'/ Account / Payments / NewPayment'的控制器或未实现IController。
我做错了什么?如何执行映射?
答案 0 :(得分:2)
我相信你应该使用这些路线,
routes.MapRoute(
@"CreateNewRuntime1",
@"Account/Payments/NewPayment/{whatever}",
new { langId="en-US",controller = @"Account", action = @"ExecuteNewPayment" });
routes.MapRoute(
@"CreateNewRuntime2",
@"{langId}/Account/Payments/NewPayment/{whatever}",
new { controller = @"Account", action = @"ExecuteNewPayment" },
new { langId = "[a-z]{2}-[a-z]{2}" });
请注意,在第一个路径中,我没有使用langId并将langId默认值设置为“en-US”。在第二条路线中,langId是必要的,但是正则表达式是存在的,因此页面的其他路线不会受到干扰。没有这个正则表达式,langid可以是其他任何东西。
答案 1 :(得分:1)
您需要将langid
作为路径的一部分包含在内,否则即使您指定了默认值,MVC也不会将您的URI映射到它。
采取以下两条路线:
routes.MapRoute(
@"CreateNewRuntime",
@"{langId}/Account/Payments/NewPayment/{whatever}",
new { langId = @"default", controller = @"Account", action = @"ExecuteNewPayment"});
routes.MapRoute(
@"CreateNewRuntime1",
@"{langId}/{subLangId}/Account/Payments/NewPayment/{whatever}",
new { langId = @"default", subLangId= @"test", controller = @"Account", action = @"ExecuteNewPayment1"});
如果我指定/Account/Payments/NewPayment
的URI,它应选择哪条路线?如果MVC确实使用langId
的默认值,那么第一条路径将始终被使用,因为它是在另一条路由之前声明的。如果您交换了两个,那么第二个将始终被调用。
如果URI的开头有不同的数据,则需要指定它们,并且在指定路径时不能使用默认值。要使这两条路线都被点击,您需要一个/eng/Account/Payments/NewPayment
和/eng/e/Account/Payments/NewPayment
答案 2 :(得分:0)
{language}
没有对应的默认值,langid
应该是language = @"default"
吗?
答案 3 :(得分:0)
您需要的是自定义路由处理程序 看看this
问候。