我正在使用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类型的异常,并带有消息
当前错误上下文错误与请求的错误不同。
我们尝试了不同的方法,但是找不到解决方案。有人可以帮忙吗?
答案 0 :(得分:0)
也许我的解决方案对某人有用。 我需要捕获JSON.NET序列化或反序列化异常,并在.net核心中间件中对其进行处理。
在json.net SerializerSettings中添加重新抛出json.net异常
services.AddControllers()。AddNewtonsoftJson(options => {
//您在这里的选项
options.SerializerSettings.Error + =(发送方,参数)=>抛出args.ErrorContext.Error;
});
添加对中间件处理程序的捕获并覆盖JsonSerializationException:
如果(例外是JsonSerializationException)
{
var exceptionMessage = exception.InnerException!= null吗? exception.InnerException.Message:exception.Message;
exception = new BadRequestException(ApiErrorCode.InvalidResourceModel,exceptionMessage);
}