如何捕获MVC视图的异常?

Ken*_*hou 12 .net asp.net-mvc exception-handling

在控制器中,尝试... catch可以捕获异常.如何捕获异常?例如,视图可能包含以下代码:

<%= Html.Encode(Model.MyID)%>
Run Code Online (Sandbox Code Playgroud)

如果Model为null,则在访问视图时将出现异常.在哪里捕获异常并将用户重定向到错误页面,并提供用户友好的错误消息?

Dav*_*vid 2

此逻辑应在控制器而不是视图内处理。例如,如果您尝试查看 MyID 不存在的产品,则重定向到错误页面。

如果发生错误,您还可以重定向到 InvalidProduct 视图,该视图将提供更详细的错误描述/说明。

编辑:除了下面人们的评论以捕获未处理的异常之外,还可以在 ActionResult 方法声明或控制器(对于所有 ActionResults)上添加 [HandleError] 属性。

[HandleError]
public ProductsController
{
    public ActionResult Show(int id)
    {
        Product p = //e.g. get product from db

        if (p == null)
        {
            return RedirectToAction("Error");
            //return RedirectToAction("InvalidProduct");
        }

        return View(p);
    }
Run Code Online (Sandbox Code Playgroud)

  • 如果出现您不知道的异常/错误,会发生什么? (3认同)
  • 这不是OP问题的答案。当然,最好在控制器中具有这种逻辑,但这仍然不是答案。我正在为客户开发一个现场原型,上传文件大约需要 15 分钟。可以在记事本中编辑视图,但要编辑控制器,我必须在我的计算机上重新编译并上传二进制文件。所以我正在使用视图来尝试一些事情。但我看不到异常,因为它们被我和服务器之间的某些代理隐藏,并且它们不会出现在日志中。仍在寻找解决方案。 (3认同)
  • 您的应用程序应该“快速失败”。无论如何,你无法处理你不知道的异常。 (2认同)