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

时间:2015-06-14 05:57:40

标签: c# .net exception-handling asp.net-web-api

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

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

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

1 个答案:

答案 0 :(得分:0)

如果它会帮助别人,

为了解决这个问题,我实现了一个ActionFilterAttribute,在我的OnActionExecuting实现中,我正在检查模型状态是否无效,如果是的话,还要做错误处理。

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

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

        //Do error handling Stuff...
    }
}