目前,我正在从事一个MVC项目,在这个项目中,我试图实现一种动态路由。我的想法是,我把原来的路由留在了global.asax.cs中,这样这条路由就会处理我制作的每个控制器。例如,联系人和帐户控制器。
上面的控制器会有类似的url
/Contact/
/Account/Logoff/ etc.我想要添加的第二个路由是当找不到控制器时的一种默认路由。在这种情况下,我假设这将是到页面或页面详细信息的路由。
例如,Url为:
/BBQ/
/BBQ/Accesoires/我在global.asax.cs中添加了三条路由,我认为它们是正确的。(也是按照正确的顺序)。下面我已经添加了路由:
routes.MapRoute(
"DefaultRoute", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Page", action = "Index", id = UrlParameter.Optional });
routes.MapRoute(
"DefaultPageRoute",
"{category}",
new { controller = "Page", action = "Index", category = UrlParameter.Optional });
routes.MapRoute(
"SecondLevelPageRoute",
"{category}/{subCategory}",
new { controller = "Page", action = "PageDetails", category = UrlParameter.Optional, subCategory = UrlParameter.Optional });使用此设置,对控制器的调用可以正常工作,但对于/BBQ/之类的页面,它会显示以下错误:
'/‘应用程序中的服务器错误。
找不到该资源。
如果我注释第一个路径,然后转到/BBQ/ url,它就会像一个咒语一样工作。我在此可路由中监督的是什么?
发布于 2011-05-21 02:22:30
您将默认路由放在第一位,因此它会尝试转到由{controller = "BBQ", Action = "Index" }定义的路由
那条路线应该是最后一条路线。但是,您需要在您的路线中提供更多细节。仅仅有一个分类路由就会产生问题。
例如,如果此路由是第一个
routes.MapRoute(
"DefaultPageRoute",
"{category}",
new { controller = "Page", action = "Index", category = UrlParameter.Optional });然后,对URL /Contact/的调用将假定您想要转到Page/Index/Contact,而不是/Contact/Index/{id}。我会使用更具体的路由,表示您正在浏览一个类别,如:
routes.MapRoute(
"DefaultPageRoute",
"Category/{category}",
new { controller = "Page", action = "Index", category = UrlParameter.Optional });所以你需要使用url www.mysite.com/Category/BBQ来查看你想要的东西,但我不认为这都是坏事。
https://stackoverflow.com/questions/6076021
复制相似问题