为什么走错了路?
本文关键字:错了路 为什么 | 更新日期: 2023-09-27 18:10:47
我正试图做什么SO做它的问题控制器。
-
/Posts/{id}/{title}
在查看帖子时(未显示动作名称) -
/Posts/New
当你发布新的东西。 -
/Posts/Delete/10
etc....
我设置了两条路由(好吧,如果不算默认路由,只有一条)。似乎正在发生的是Post控制器中的所有操作都通过第一个控制器路由。
那是什么?很明显我弄错了,但是我想不出来。
routes.MapRoute("ViewPosts",
"Posts/{postid}/{title}",
new { controller = "Posts", action = "View", postid = "", title = "" });
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
第一条路由处理从/Posts
开始的所有请求。
你需要使用约束来允许{postid}
是唯一的数字:
routes.MapRoute("ViewPosts",
"Posts/{postid}/{title}",
new { controller = "Posts", action = "View", postid = "", title = "" },
new { postid= @"'d+" });
在这种情况下,只有当提供了数字Id时,该路由才会处理它,否则"Default"路由将处理。
所有路由都经过第一个,因为您没有指定postid
字段只能是数字,或者定义了一个将捕获/Posts/New
的较早路由。它传递New
作为postid
与View
的动作。
你可以在之前添加路由定义:
routes.MapRoute("NewPost",
"Posts/New",
new{controller="Posts", action="New"});
或者任何合适的控制器/动作