【发布时间】:2011-08-26 15:32:08
【问题描述】:
我在 Global.asax.cs 中这样配置路由:
routes.MapRoute("Post", "Post/Show/{PostId}", new { controller = "Post", action = "Show" });
这是使用过的控制器的预览:
public partial class PostController : Controller
{
public ActionResult Show(int PostId)
{
...
}
}
问题是它选择使用 Show() 动作,但它没有给出 int 值,因此它给出了 null。这是我使用的 URL 示例:../Post/Show/0
编辑: 当我像这样配置我的路线时:
routes.MapRoute("Post", "Post/Show/{id}", new { controller = "Post", action = "Show" });
routes.MapRoute("Timeline", "{controller}/{action}/{Page}", new { controller = "Timeline", action = "List" });
一切正常,但是当我这样配置时:
routes.MapRoute("Timeline", "{controller}/{action}/{Page}", new { controller = "Timeline", action = "List" });
routes.MapRoute("Post", "Post/Show/{id}", new { controller = "Post", action = "Show" });
第二条路线“发布”失败。 为什么?!
【问题讨论】:
-
顺序应始终特定于一般。
Post/Show/1232123将始终匹配与{controller}/{action}/{page}完全相同的模式。您始终可以对路由本身设置路由限制,以从匹配中清除不需要的路由,但没有理由(根据您的上述路由)您甚至需要交换它们。 -
基于您的时间线路线。该路线基本上将充当您的默认路线。那是你要的吗?对
http://site.com/的任何请求都将匹配您的时间线路线。 -
不,我不想这样,我设置了默认路由:routes.MapRoute("Home", "", new { controller = "Home", Action = "Index" });
-
只是确保。如果您愿意,您可以发布您的整个路线设置,我可以查看它以了解它的路线。或者!您可以下载/安装 Glimpse (getglimpse.com) 以查看匹配的内容和原因。
标签: c# asp.net asp.net-mvc-3 routing