Asp.net mvc ASP.NET MVC 3自定义异常过滤器OneException不';t火
我正在开发一个ASP.NETMVC3项目,我想实现我的自定义错误处理逻辑。我试图通过如下方式扩展HandleErrorAttribute来解决此问题:Asp.net mvc ASP.NET MVC 3自定义异常过滤器OneException不';t火,asp.net-mvc,json,asp.net-mvc-3,Asp.net Mvc,Json,Asp.net Mvc 3,我正在开发一个ASP.NETMVC3项目,我想实现我的自定义错误处理逻辑。我试图通过如下方式扩展HandleErrorAttribute来解决此问题: public class ErrorHandlingAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { if (!filterContext.ExceptionHa
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调用之后,在模式弹出对话框上显示一些错误消息(通过呈现部分视图)。因此,在OneException方法中,我将ExceptionContext的结果设置为JsonResult(我现在不会将partialview呈现为字符串,我稍后会这样做)
我的控制器操作如下所示(我用自定义过滤器装饰它):
[HttpPost]
[错误处理]
公共JsonResult创建(StopEditViewModel视图模型)
{
Stop-Stop=Mapper.Map(viewModel.Stop);
if(ModelState.IsValid)
{
Stop addedStop=_testFacade.AddStop(Stop);
返回Json(新的{success=true,tableContainer=_tableName},JsonRequestBehavior.DenyGet);
}
返回Json(新的{success=false},JsonRequestBehavior.DenyGet);
}
在做了一些研究之后,我发现我需要删除filters.Add(newhandleerrorattribute())行。我也这么做了
我的web.config文件有
标记
但是,当我调用createpost操作时,如果发生异常,则不会调用自定义筛选器方法。应用程序崩溃。我错过什么了吗
谢谢。您可以在ajax选项中捕获异常OnFailure方法
In View
@using (Ajax.BeginForm("SomeAction", new AjaxOptions { OnFailure = "handleAjaxError" }))
{
}
function handleAjaxError(ajaxContext) {
alert("Request failed, status code ");
}
当您使用Ajax调用操作时,它将在方法中返回 您可以在ajax选项中捕获异常OnFailure方法
In View
@using (Ajax.BeginForm("SomeAction", new AjaxOptions { OnFailure = "handleAjaxError" }))
{
}
function handleAjaxError(ajaxContext) {
alert("Request failed, status code ");
}
当您使用Ajax调用操作时,它将在方法中返回 Deniz让你用Ajax调用Deniz让你用Ajax调用Kumar调用,谢谢你的回答。我的观点是,我希望尽可能避免重复的错误处理代码。我的所有控制器操作都需要它,而不仅仅是ajax表单。所以我决定编写一个自定义异常过滤器。我可以用try-catch块将代码包装在每个控制器操作中,并返回一些暴露错误消息的JsonResult,但如果可能的话,我希望通过添加一个异常过滤器来实现。如果使用Ajax或java脚本调用该操作,那么它将不会调用任何过滤器。因为它在调用函数中返回值。或者你的“handleAjaxError”函数将捕获所有ajax异常,因此没有任何必要为每个ajax调用编写单独的异常方法。如果我能为你提供更多帮助,请告诉我。好吧,我想我必须继续你的方法。谢谢,希夫库玛,谢谢你的回答。我的观点是,我希望尽可能避免重复的错误处理代码。我的所有控制器操作都需要它,而不仅仅是ajax表单。所以我决定编写一个自定义异常过滤器。我可以用try-catch块将代码包装在每个控制器操作中,并返回一些暴露错误消息的JsonResult,但如果可能的话,我希望通过添加一个异常过滤器来实现。如果使用Ajax或java脚本调用该操作,那么它将不会调用任何过滤器。因为它在调用函数中返回值。或者你的“handleAjaxError”函数将捕获所有ajax异常,因此没有任何必要为每个ajax调用编写单独的异常方法。如果我能为你提供更多帮助,请告诉我。好吧,我想我必须继续你的方法。非常感谢。