![](/img/trans.png)
[英]Is this still the way to handle JSON serializer circular reference exception in asp.net MVC
[英]ASP.Net MVC - how to handle exception in JSON action (return JSON error info), but also publish the exception for filters?
我正在使用过滤器来记录操作引发的异常,如下所示:
public override void OnActionExecuted(ActionExecutedContext filterContext) {
if (filterContext.Exception != null) {
//logger.Error(xxx);
}
base.OnActionExecuted(filterContext);
}
现在我想处理我所有的 JSON 操作以返回带有异常信息的 JSON 结果。 这允许 Ajax 调用确定服务器上是否有任何错误,而不是接收错误页面源,这对 Ajax 是无用的。 我已经在我的 AppControllerBase 中为 JSON 操作实现了这个方法:
public ActionResult JsonExceptionHandler(Func < object > action) {
try {
var res = action();
return res == null ? JsonSuccess() : JsonSuccess(res);
} catch (Exception exc) {
return JsonFailure(new {
errorMessage = exc.Message
});
}
}
这很好用,但显然 catch() 语句阻止所有过滤器处理异常,因为实际上没有抛出异常。 有什么办法可以让过滤器的异常可用(filterContext.Exception)?
您可以将异常存储在 RequestContext 中并在您的过滤器中拦截它。
解决方案:
行动:
public ActionResult JsonExceptionHandler(Func < object > action) {
try {
var res = action();
return res == null ? JsonSuccess() : JsonSuccess(res);
} catch (Exception exc) {
controller.ControllerContext.HttpContext.AddError(exc);
return JsonFailure(new {
errorMessage = exc.Message
});
}
}
筛选:
public override void OnActionExecuted(ActionExecutedContext filterContext) {
var exception = filterContext.Exception ? ? filterContext.HttpContext.Error;
if (exception != null) {
//logger.Error(xxx);
}
if (filterContext.Result != null &&
filterContext.HttpContext.Error != null) {
filterContext.HttpContext.ClearError();
}
base.OnActionExecuted(filterContext);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.