捕获 json.net 序列化错误

2024-04-23

我正在使用 dotnet core 2.2 开发 Web api,我们希望捕获序列化异常并返回 400 badRequest 以与验证错误 422UnprocessableEntity 区分开。我们尝试创建一个异常处理程序

public void JsonSerializerExceptionHandler(object sender, Newtonsoft.Json.Serialization.ErrorEventArgs args)
    {
        args.ErrorContext.Handled = true;
        var errorContext = args.ErrorContext;
        if (errorContext == null)
        {
            return;
        }

        var error = errorContext.Error;
        throw new SerializationException(error.Message, error.InnerException);
    }

但是当它抛出时,它会抛出另一个 InvalidOperationException 类型的异常并带有消息

当前错误上下文错误与请求的错误不同。

我们尝试了不同的方法但找不到解决方案。有人可以帮忙吗?


也许我的解决方案对某人有用。 我需要捕获 JSON.NET 序列化或反序列化异常并在我的 .NET Core 中间件中处理它。

在 JSON.NET SerializerSettings 中添加重新抛出 json.net 异常

services.AddControllers().AddNewtonsoftJson(options => {


    //your options here
 

    options.SerializerSettings.Error += (sender, args) => throw args.ErrorContext.Error;

});

在中间件处理程序上添加 catch 并覆盖 JsonSerializationException:

if (exception is JsonSerializationException)
{
    var exceptionMessage = exception.InnerException != null ? 
       exception.InnerException.Message : exception.Message;

    exception = new BadRequestException(ApiErrorCode.InvalidResourceModel,
      exceptionMessage);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

捕获 json.net 序列化错误 的相关文章

随机推荐

  • 如何首先使用 msbuild 构建依赖项目

    我刚刚开始研究 msbuild 因为我想制作自己的构建脚本 目前 我可以创建仅编译一个项目的构建脚本 但如何处理依赖项 例如 如果我有两个使用这两个 msbuild 脚本构建的项目怎么办 项目A xml 项目B xml 如何告诉 msbui
  • 用于构建“调试”和“发布”JAR 文件的惯用 Gradle 脚本

    我正在尝试创建一个 Gradle 构建脚本来构建 Java jar文件处于 发布 或 调试 模式 并且在参数化脚本时遇到问题 问题是 使用 Java 插件在 Gradle 脚本中执行此操作的惯用方法是什么 或者 如果没有惯用的方法 那么真正
  • FCM flutter 启用通知振动

    我正在为 Android 和 IOS 开发 Flutter 应用程序 我已经根据这个为Android创建了通知渠道article https rechor medium com creating notification channels
  • 类型 x 比值更难访问

    这是我的代码的抽象 module RootModule module private SubModule I want everything in this module to be inaccessible from outside th
  • Heroku 上带有 Django Channels 的 Websocket

    我正在尝试将我的应用程序部署到heroku 该应用程序有一个简单的聊天系统 使用 Websockets 和 django 通道 当我使用 python manage py runserver 测试我的应用程序时 应用程序的行为正如预期的那样
  • 处理时间跨度的最佳方式?

    PHP 中是否有处理时间跨度的首选类或方法 我感兴趣的主要功能是检查日期是否在时间跨度内 或生成下限和上限的时间戳 使用unix时间戳 如果是mysql数据 那么你可以像这样存储时间戳 如果不是 那么你也可以将mysql日期时间转换为uni
  • 如何使表格中一行的最后一个单元格占据所有剩余宽度

    在下面的 HTML 片段中 如何使包含 LAST 的列的宽度占据行的其余部分 并且包含 COLUMN ONE 和 COLUMN TWO 的列的宽度足以包含其内容 并且不更大 谢谢 table border collapse collapse
  • Gorm 中的级联删除不会删除关联表

    我是戈尔姆的新手 我试图进行级联删除 如果我删除一个用户 与该用户关联的角色 属于 个人资料 有一个 和书籍 一对多 也将被删除 我在下面设置了模型 但级联似乎不起作用 当我删除用户时 角色 个人资料和书籍仍保留在数据库中 而不是被删除 软
  • 单击元素以外的任意位置以使用 if 语句隐藏它

    解决方案如下 我已经阅读了这里有关这个概念的大多数问题 但我似乎无法让它与 if 语句一起使用 有什么帮助吗 JSFiddle http jsfiddle net 2udYp button click function div fadeTo
  • 如何通过 Swift 包管理器在 Xcode 中安装包

    我正在 Xcode 中开发一个项目 并尝试安装和使用加密货币Swift https github com krzyzanowskim CryptoSwift通过 Swift 包管理器进行包 我读了文档 https swift org pac
  • CMake:不支持的 GNU 版本 - 不支持高于 8 的 gcc 版本

    在降级我的 GCC 之前 我想知道是否有一种方法可以确定我的机器中的哪些程序 框架或依赖项将被破坏 以及是否有更好的方法来安装 openpose 例如 更改 CMake 中的某些内容 有没有办法可以解决这个问题 而无需更改我的系统 GCC
  • 同时使用 :nth-child 和 :nth-last-child

    我做不到 nth child and nth last child伪类同时工作 效果很好 突出显示前 3 个要素 a li nth child n 3 background fbfcc8 效果很好 突出显示最后 3 个元素 b li nth
  • Android:如何以原始尺寸显示图像

    我从字节数组创建位图图像并将其显示在 ImageView 中 这android layout width and android layout heightImageView 的设置为wrap content 并且android scale
  • 通过属性和正文指定 JSTL 值之间的区别

    我试图弄清楚 JSTL 的这两种用途之间是否存在功能差异
  • 电话号码的 jQuery 输入掩码

    我希望用户的输入自动填充电话号码的标点符号 以便看起来像这样 xxx xxx xxxx 这是我的 HTML 代码 div class form group div
  • UIManagedDocument 迁移数据模型

    我正在开发一个 iPhone 应用程序 它使用UIManagedDocument并将其文档存储在 iCloud 上 一切都工作正常 直到我更改了我的核心数据模型 方案 添加了新的模型版本 就像我在过去几周内多次所做的那样 我添加了一个新属性
  • 如何使用python Bottle框架获取客户端IP地址

    我需要使用 python 的客户端 IP 地址 我已经尝试过下面的代码 但它在服务器中不起作用 from socket import gethostname gethostbyname ip gethostbyname gethostnam
  • 任务并行不稳定,有时使用 100% CPU

    我目前正在测试 C 的 Parallel 一般来说 它工作得很好 并且使用并行比普通的 foreach 循环更快 然而 有时 比如五分之一 我的 CPU 会达到 100 使用率 导致并行任务非常慢 我的 CPU 设置是 i5 4570 和
  • R:评估字符串

    事实证明需要定义一个函数eval string它评估一个字符串 就像它是一个表达式 调用 一样 例如 如果 string lt cyl 6 disp gt 200 我想要 eval string string mtcars 相当于 eval
  • 捕获 json.net 序列化错误

    我正在使用 dotnet core 2 2 开发 Web api 我们希望捕获序列化异常并返回 400 badRequest 以与验证错误 422UnprocessableEntity 区分开 我们尝试创建一个异常处理程序 public v