当我尝试传播异常并将其作为参数传递给我的ErrorController时,它始终为null。
Controller
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
我遇到了几个错误
最佳答案
每当您使用RedirectToAction时,它都会执行HTTP重定向。您传递的任何值都必须是原始类型,因为它们将被附加到重定向URL。这意味着您无法传递整个对象,就像您要尝试处理异常一样。您可以做的最简单的操作是将RedirectToAction替换为
return Error(ex, this.ControllerContext.RouteData.Values["controller"], this.ControllerContext.RouteData.Values["action"]);
这种方法仍会调用您的Error方法并正确显示View,但不会像重定向那样更改URL。如果要使用此方法,则可以尝试使用javascript更改URL。
另外,您是否真的要向最终用户显示所有错误详细信息?如果仅使用它来显示没有详细信息的普通错误页面,则可以使用Web配置中的customErrors属性来重定向到错误页面。这样,您的最终用户只知道发生了一些错误。
关于asp.net-mvc - Controller MVC中的错误传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31142241/