我正在使用 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 类型的异常并带有消息
当前错误上下文错误与请求的错误不同。
我们尝试了不同的方法但找不到解决方案。有人可以帮忙吗?
也许我的解决方案对某人有用。
我需要捕获 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;
});
在中间件处理程序上添加 catch 并覆盖 JsonSerializationException:
if (exception is JsonSerializationException)
{
var exceptionMessage = exception.InnerException != null ?
exception.InnerException.Message : exception.Message;
exception = new BadRequestException(ApiErrorCode.InvalidResourceModel,
exceptionMessage);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)