【发布时间】:2011-12-03 08:30:13
【问题描述】:
我写博客作为一个学习项目已经有一段时间了,我刚刚重写了我的 URL 结构以改进我的控制器的组织。这进展相当顺利,但我对一条冲突的路线有一点问题。
我正在尝试如下设置我的 URL 结构:
/
/page/2
/category
/category/page/2
类别存储在数据库中。目前这很好用,但我只是注意到,当我尝试链接回主页时,它却点击了/page。
这是我当前的路由表:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Admin",
"admin",
new { controller = "Admin", action = "Index" }
);
routes.MapRoute(
"ShowPagedPostsByCategory",
"{category}/page/{page}",
new { controller = "Posts", action = "Index", page = UrlParameter.Optional },
new { page = @"(\d+)?" }
);
routes.MapRoute(
"ShowPagedPosts",
"page/{page}",
new { controller = "Posts", action = "Index", page = UrlParameter.Optional },
new { page = @"(\d+)?" }
);
routes.MapRoute(
"ShowPostsByCategory",
"{category}",
new { controller = "Posts", action = "Index" }
);
routes.MapRoute(
"ShowTaggedPosts",
"posts/tagged/{tag}",
new { controller = "Posts", action = "ShowTaggedPosts", tag = UrlParameter.Optional }
);
routes.MapRoute(
"EditDeleteComment",
"posts/{action}/{id}",
new { controller = "Posts" },
new { action = @"EditComment|DeleteComment", id = @"\d+" }
);
routes.MapRoute(
"AddComment",
"{controller}/comment",
new { controller = "Posts", action = "Comment" }
);
routes.MapRoute(
"ShowPost",
"{controller}/{PostID}/{*slug}",
new { controller = "Posts", action = "ShowPost", slug = UrlParameter.Optional },
new { PostID = @"\d+" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Posts", action = "Index", id = UrlParameter.Optional }
);
}
我可以看出问题所在:“/”的主 URL 与 ShowPagedPosts 路由匹配,但将其移至默认路由下方似乎是错误的做法。这让我觉得我的方法有点不对劲。谁能指出我正确的方向吗?
编辑:实际上,使用 RouteDebugger 我可以看到它实际上与 ShowPagedPosts 和 ShowPostsByCategory 路由匹配。
【问题讨论】:
标签: c# asp.net-mvc-3 conflict routes