我正在努力做它的问题控制器所做的事情。
/Posts/{id}/{title}
(操作名称未显示)/Posts/New
。 /Posts/Delete/10
等.... 我设置了两条路线(如果您不计算默认路线,则设置一条路线)。似乎正在发生的事情是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
);
答案 0 :(得分:1)
所有路由都是通过第一个路由,因为您没有指定postid
字段只能是数字,或者定义了一个将捕获/Posts/New
的早期路由。它将New
作为postid
View
行为传递。
您可以在之前添加此路线定义:
routes.MapRoute("NewPost",
"Posts/New",
new{controller="Posts", action="New"});
或者无论适当的控制器/动作是什么。
答案 1 :(得分:1)
第一条路线处理从/Posts
开始的所有请求。
您需要使用约束来允许{postid}
仅为数字:
routes.MapRoute("ViewPosts",
"Posts/{postid}/{title}",
new { controller = "Posts", action = "View", postid = "", title = "" },
new { postid= @"\d+" });
在这种情况下,只有提供了数字标识,此路由才会处理它,否则“默认”路由将处理。