我正在使用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的异常,并附带消息
当前错误上下文错误与请求错误不同。
我们尝试了不同的方法,但无法找到解决方案。谁能帮帮我?
也许我的解决方案会对某人有用。我需要在我的.net core中间件中捕获JSON.NET序列化或反序列化异常并处理它。
在json.net SerializerSettings中添加重投json.net异常。
services.AddControllers().AddNewtonsoftJson(options => {
/你的选项在这里
options.SerializerSettings.Error += (sender, args) => throw args.ErrorContext.Error;
});
在中间件处理程序上添加 catch,并覆盖 JsonSerializationException。
如果(异常是JsonSerializationException)
{
var exceptionMessage = exception.InnerException != null ? exception.InnerException.Message : exception.Message;
exception = new BadRequestException(ApiErrorCode.InvalidResourceModel, exceptionMessage);
}