gpt4 book ai didi

asp.net-core - 捕获 json.net 序列化错误

转载 作者:行者123 更新时间:2023-12-04 17:40:52 24 4
gpt4 key购买 nike

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

Current error context error is different to requested error.

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

最佳答案

也许我的解决方案对某些人有用。我需要捕获 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;

});

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

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

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

关于asp.net-core - 捕获 json.net 序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54557846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com