当缺少asp.net mvc的参数时自动抛出404错误

时间:2010-11-03 21:06:43

标签: c# asp.net-mvc

当Google僵尸程序出现时,我收到了以下错误:

  

参数字典包含非可空类型'System.Int32'的参数'id'的空条目,用于'someclass'中的方法'System.Web.Mvc.ActionResult Show(Int32)'。可选参数必须是引用类型,可空类型,或者声明为可选参数   参数名称:参数

我想知道在这种情况下是否可以让应用程序抛出404而不是缺少参数异常。

谢谢!

更新以澄清我想要的是这个特定错误的所有情况都会抛出404错误而不是500错误。最好通过编写某种只捕获此错误的包装器。

3 个答案:

答案 0 :(得分:8)

public ActionResult Index(int? id)
{
   if(!id.HasValue())
   {
     throw new HttpException(404, "Are you sure you're in the right place?");
   }
}

答案 1 :(得分:5)

您要找的是route constraints

答案 2 :(得分:1)

这不是一篇新文章,我不能保证在最近的MVC版本中没有更好的方法,但我认为这是一个非常好的可能性:)

我相信你应该能够编写一个自定义模型绑定器,它将检查ID属性是否存在并且是必需的,如果它不存在则抛出404错误/拒绝绑定..我知道它并不多,但它可能以正确的方式引导你:)

P.S。可以在此处找到示例模型绑定器及其工作原理:
http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx