我在自定义错误部分中使用了 HandleErrorAttribute 和自定义错误控制器的组合来处理 MVC3 应用程序中的错误。逻辑是通过 HandleErrorAttribute 中的 OnException 处理程序处理任何 Ajax 请求错误,并通过 ErrorController 处理其余错误。下面是代码 -
// Handle any ajax error via HandleErrorAttribute
public class HandleAjaxErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
public override void OnException(System.Web.Mvc.ExceptionContext filterContext)
{
filterContext.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
var exception = filterContext.Exception;
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
//some logic
filterContext.ExceptionHandled = true;
}
}
}
//Handle remaining errors in the Error Controller
public class ErrorController : Controller
{
protected override void HandleUnknownAction(string actionName)
{
var exception = Server.GetLastError(); //Can't get the exception object here.
//some logic
}
}
Web.config 设置:
<customErrors mode="On" defaultRedirect="~/Error">
</customErrors>
当任何非 ajax 异常发生时,控制从 OnException 块流向错误控制器中的 HandleUnknownAction。但是我无法获取 Exception 对象。如何在错误控制器中获取异常对象?
另外,您认为这两个步骤的方法是处理 MVC3 中的错误的正确方法吗?我曾想过使用 Application_Error 事件处理程序在集中位置处理错误,但根据我的研究,这不是 MVC 应用程序的推荐方法。