我正在开发一个 ASP.NET MVC 3 项目,我想实现我的自定义错误处理逻辑。我试图通过像这样扩展 HandleErrorAttribute 来做到这一点:
public class ErrorHandlingAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
if (!filterContext.ExceptionHandled)
{
filterContext.Result = new JsonResult {
Data = new { success = false, error = filterContext.Exception.ToString() },
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
filterContext.ExceptionHandled = true;
}
}
}
我需要的是,在一些 AJAX 调用之后,在模式弹出对话框上显示一些错误消息(通过呈现部分视图)。因此,在 OnException 方法中,我将 ExceptionContext 的结果设置为 JsonResult(我现在不将部分视图渲染为字符串,稍后我会这样做)
我的控制器操作如下(我用我的自定义过滤器装饰了它):
[HttpPost]
[ErrorHandling]
public JsonResult Create(StopEditViewModel viewModel)
{
Stop stop = Mapper.Map<StopViewModel, Stop>(viewModel.Stop);
if (ModelState.IsValid)
{
Stop addedStop = _testFacade.AddStop(stop);
return Json(new { success = true, tableContainer = _tableName }, JsonRequestBehavior.DenyGet);
}
return Json(new { success = false }, JsonRequestBehavior.DenyGet);
}
经过一番研究,我发现我需要filters.Add(new HandleErrorAttribute());
从 Global.asax 中的 RegisterGlobalFilters 方法中删除行。我也这样做了。
我的 web.config 文件有<customErrors mode="On" />
标签。
但是当我调用 Create POST 操作时,如果发生异常,则不会调用自定义过滤器方法。应用程序崩溃。我错过了什么吗?
谢谢。