在委派处理程序的格式化程序中处理反序列化异常

本文关键字:程序 处理 反序列化 异常 委派 格式化 | 更新日期: 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...
    }
}