我正在尝试确定如何将/ News / 5的路线映射到我的新闻控制器。
这是我的NewsController:
public class NewsController : BaseController
{
//
// GET: /News
public ActionResult Index(int id)
{
return View();
}
}
这是我的Global.asax.cs规则:
routes.MapRoute(
"News", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "News", action = "Index", id = -1 } // Parameter defaults
);
我尝试去/ News / 5但是我收到一个资源未找到错误,但是当进入/ News / Index / 5时它有效吗?
我只试过{controller}/{id}
,但这只会产生同样的问题。
谢谢!
答案 0 :(得分:18)
您的{controller}/{id}
路线是正确的,但是您在另一条路线之后注册了它。在路线列表中,它自上而下搜索并找到匹配的第一个匹配。
为了帮助引导路由,我建议为此创建路由约束,以确保#1控制器存在,#2 {id}
是一个数字。
请参阅this article
主要是:
routes.MapRoute(
"Index Action", // Route name
"{controller}/{id}", // URL with parameters EDIT: forgot starting "
new { controller = "News", action = "Index" },
new {id= @"\d+" }
);
答案 1 :(得分:6)
您需要确保新路线位于默认路线之前,如下所示:
routes.MapRoute(
"NewsAbbr", // Route name
"{controller}/{id}", // URL with parameters
new { controller = "News", action = "Index", id = -1 } // Parameter defaults
);
routes.MapRoute(
"News", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "News", action = "Index", id = -1 } // Parameter defaults
);