捕捉json.net序列化错误

问题描述 投票:3回答:1

我正在使用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的异常,并附带消息

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

我们尝试了不同的方法,但无法找到解决方案。谁能帮帮我?

asp.net-core json.net asp.net-core-webapi asp.net-core-2.2
1个回答
0
投票

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

  1. 在json.net SerializerSettings中添加重投json.net异常。

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

    /你的选项在这里

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

    });

  2. 在中间件处理程序上添加 catch,并覆盖 JsonSerializationException。

    如果(异常是JsonSerializationException)

    {

    var exceptionMessage = exception.InnerException != null ? exception.InnerException.Message : exception.Message;

    exception = new BadRequestException(ApiErrorCode.InvalidResourceModel, exceptionMessage);

    }

© www.soinside.com 2019 - 2024. All rights reserved.