c# - ASP.Net MVC - 如何处理 JSON 操作中的异常(返回 JSON 错误信息),同时发布过滤器的异常?

标签 c# json asp.net-mvc exception filter

我正在使用一个过滤器来记录看起来像这样的操作抛出的异常:

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 中并在您的过滤器中拦截它。

关于c# - ASP.Net MVC - 如何处理 JSON 操作中的异常(返回 JSON 错误信息),同时发布过滤器的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/737101/

相关文章:

c# - 选中列表框,其中每个项目都有数据值属性?

mysql - 在 LINQ 和 Entity Framework 中使用笛卡尔积来组合 3 个表

javascript - 本地存储功能

python - 如何自动修复无效的 JSON 字符串?

asp.net - Log4net 无法在线登录

c# - ActionResult 中的 MVC 字符串

c# - 如何使用存储在列表中的对象(用于排序目的)C#

c# - 过滤 TreeView 的所有节点和子节点

C# 电子邮件到 gmail 标记为垃圾邮件,但来自雷鸟客户端的邮件正常发送(非垃圾邮件)

android - GET 请求 JSONObject android