我正在使用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,其中提到序列化异常未被过滤器捕获(但它没有提及序列化),我找不到任何解决方案来捕获它并正确处理它
答案 0 :(得分:0)
如果它会帮助别人,
为了解决这个问题,我实现了一个ActionFilterAttribute,在我的OnActionExecuting实现中,我正在检查模型状态是否无效,如果是的话,还要做错误处理。
这就是在动作执行之前和对象反序列化之后的位置。
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid)
{
return;
}
//Do error handling Stuff...
}
}