如何捕获“参数的空条目”错误

时间:2014-09-02 15:38:02

标签: asp.net-mvc asp.net-mvc-5

我知道有很多人遇到此错误,但大多数人都使用内置的id功能,但我不是。除了我在本网站上阅读的内容之外,我还需要提出一个友好的错误,而不是内置的黄色死亡屏幕:

  

参数字典包含参数" productId'的空条目。   非可空类型&Systems.Int32'

我的网址是......

  

/ myController的/ MyView的人= 789&安培;?的productId = 123

...其中productId实际上应该包含一个整数值。即使我在方法中检查它是null,MVC也会在检查之前抛出异常。

是否可以捕获此错误并提供错误视图?

我知道我可以将变量类型设置为Int32?,但这似乎是一个黑客攻击,因为方法 需要该值。

public ActionResult Show(string person, Int32 productId)
{
    if (productId== null) // exception occurs before this point, so this check fails
    {
        return View("Error", new ErrorViewModel { Summary = "No value provided" });
    }
// ....
}

1 个答案:

答案 0 :(得分:0)

你的问题很混乱,这就是你应该如何编写行动的代码:

public ActionResult Show(string person, Int32? productId)
{
  if (productId.HasValue == false ) // exception occurs before this point, so this check fails
  {
     return View("Error", new ErrorViewModel { Summary = "No value provided" });
  }
  // ....
}

在您发布的代码中,productId永远不会为null,因为没有方法签名可以匹配其中没有productId的查询字符串。现在有一个可以为空的productId你的代码是有意义的。