当我尝试传播异常并将其作为参数传递给我的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
答案 0 :(得分:0)
每当您使用RedirectToAction时,它都会执行HTTP重定向。您传递的任何值都必须是基本类型,因为它们将附加到重定向URL。这意味着您无法传递整个对象,就像您尝试处理异常一样。您可以做的最简单的事情是用
替换RedirectToActionreturn Error(ex, this.ControllerContext.RouteData.Values["controller"], this.ControllerContext.RouteData.Values["action"]);
此方法仍将调用您的Error方法并正确显示View,但它不会像重定向一样更改URL。如果您想使用此方法,则可以尝试使用javascript更改URL。
另外,您真的想要向最终用户显示所有错误详细信息吗?如果您只是使用它来显示没有详细信息的纯错误页面,那么您可以查看只需使用Web配置中的customErrors属性重定向到错误页面。这样你的最终用户知道的是发生了一些错误。