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

Handle Deserialization Exception in Formatter of Delegating Handler

我正在使用网络 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;
    }
}

这似乎运行良好,直到我遇到反序列化异常, 它没有被我的过滤器捕获。

我已经阅读了异常处理文档 Here,其中提到序列化异常未被过滤器捕获(但是它没有提到序列化),我找不到任何解决方案来捕获和处理它它正确。

万一对别人有帮助,

为了处理这个问题,我实现了一个 ActionFilterAttribute,在我的 OnActionExecuting 实现中,我检查模型状态是否无效,如果无效则进行错误处理。

这是动作执行之前和对象反序列化之后的位置。

public class ValidateModelAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        if (actionContext.ModelState.IsValid)
        {
            return;
        }

        //Do error handling Stuff...
    }
}