如何将/ News / 5的路由映射到我的新闻控制器

时间:2012-02-17 16:34:02

标签: asp.net asp.net-mvc routes asp.net-mvc-4

我正在尝试确定如何将/ 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},但这只会产生同样的问题。

谢谢!

2 个答案:

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