为什么使用错误的路线?

时间:2011-10-07 22:07:42

标签: c# asp.net-mvc-3 routes

我正在努力做它的问题控制器所做的事情。

    查看帖子时
  • /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
);

2 个答案:

答案 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+" });

在这种情况下,只有提供了数字标识,此路由才会处理它,否则“默认”路由将处理。