我使用的大多数路由都基于标准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);
...
}