在委派处理程序的格式化程序中处理反序列化异常
本文关键字:程序 处理 反序列化 异常 委派 格式化 | 更新日期: 2023-09-27 17:56:10
我正在使用Web API并实现委派处理程序。
我有一个 Json 序列化程序/反序列化程序的自定义,它在 API 配置中注册为格式化程序。
var globalFormatters = GlobalConfiguration.Configuration.Formatters;
var jsonFormatter = globalFormatters.JsonFormatter;
jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
jsonFormatter.SerializerSettings.Converters.Add(...)
至于异常处理,我添加了一个 ExceptionFilterAttribute,并将其作为过滤器添加到配置中。
public class MethodAttributeExceptionHandling : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
var errorHandler = new ErrorHandler();
var response = errorHandler.ProcessError(actionExecutedContext);
actionExecutedContext.Response = response;
}
}
这似乎运行良好,直到我遇到反序列化异常,没有被我的过滤器捕获。
我已经阅读了这里的异常处理文档,其中提到过滤器未捕获序列化异常(但是它没有提到序列化),我找不到任何解决方案来捕获它并正确处理它。
如果它能帮助别人,
为了解决这个问题,我实现了一个ActionFilterAttribute,在我的OnActionExecute实现中,我正在检查模型状态是否无效,如果是,则执行错误处理操作。
这是操作执行之前和对象反序列化之后的位置。
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid)
{
return;
}
//Do error handling Stuff...
}
}