捕获json.net序列化错误

时间:2019-02-06 16:07:54

标签: asp.net-core json.net asp.net-core-webapi asp.net-core-2.2

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

  

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

    //您在这里的选项

    options.SerializerSettings.Error + =(发送方,参数)=>抛出args.ErrorContext.Error;

    });

  2. 添加对中间件处理程序的捕获并覆盖JsonSerializationException:

    如果(例外是JsonSerializationException)

    {

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

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

    }