控制器MVC中的错误传播

时间:2015-06-30 15:18:44

标签: asp.net-mvc error-handling

当我尝试传播异常并将其作为参数传递给我的ErrorController时,它始终为null。

控制器

public ActionResult Test()
{
    try
    {
        throw new Exception("ALGO");
        //
        return View();
    }
    catch (Exception ex)
    {
        return RedirectToAction("Error", "Error",
                new
                {
                    exception = ex,
                    controller = this.ControllerContext.RouteData.Values["controller"],
                    action = this.ControllerContext.RouteData.Values["action"]
                });
    }
}

ErrorController

public ActionResult Error(Exception exception, string controller, string action)
{
    // exception is always null...
    Response.StatusCode = 500;
    ViewBag.exception = new HandleErrorInfo(exception, controller, action);

    return View();
}

知道如何正确获取异常吗?

是否有更好的错误处理方法?

我也试过这个one,但由于parameteless constructor for handleerrorinfo

我收到了一些错误

1 个答案:

答案 0 :(得分:0)

每当您使用RedirectToAction时,它都会执行HTTP重定向。您传递的任何值都必须是基本类型,因为它们将附加到重定向URL。这意味着您无法传递整个对象,就像您尝试处理异常一样。您可以做的最简单的事情是用

替换RedirectToAction
return Error(ex, this.ControllerContext.RouteData.Values["controller"], this.ControllerContext.RouteData.Values["action"]);

此方法仍将调用您的Error方法并正确显示View,但它不会像重定向一样更改URL。如果您想使用此方法,则可以尝试使用javascript更改URL。

另外,您真的想要向最终用户显示所有错误详细信息吗?如果您只是使用它来显示没有详细信息的纯错误页面,那么您可以查看只需使用Web配置中的customErrors属性重定向到错误页面。这样你的最终用户知道的是发生了一些错误。