asp.net-mvc – 如何处理MVC3路由的空参数字典错误?

我使用的大多数路由都基于标准MVC3应用程序中定义的默认路由:

 routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional });

但是,如果我的路由是“/ Book / Update / 1”并且由于用户在没有1的情况下手动键入地址而保持“1”,则抛出空参数错误.显然我的路线需要这个1并且不是可选的,但我不会为我的每一个动作定义一个自定义路线.如果我打开自定义错误,我不确定这是什么类型的错误重定向到正确的HTML错误页面.

题:
我如何处理这个错误,就像404一样?我没有看到这种方法有任何问题,因为现实是在路线中留下ID号与未找到的404号相同.

或者我在设计路线时遗漏了什么?似乎很直接给我.

谢谢.

更新:
我很欣赏下面给出的答案.它们都是合理的方法.为了更清楚我的问题,让我详细说明一下.在我看来,“/ Book / Update / 1”的路线只有一个目的.更新书1.除此之外的任何其他偏差都应该失败并重定向到404.我不认为这与不存在的静态html页面有任何不同.我可能会争论一个不包含在.net中的功能,我只是觉得可能有更简单的方法.

UPDATE2:
应该挖得更深一些.有一个很好的例子here.我发现第二个答案最有帮助.

最佳答案

public ActionResult Update(int? id)
{
    if (!id.HasValue) return HttpNotFound();

    //Debug.Assert(id.Value != null);
    ...
}
点赞