2015-06-14 40 views
0

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

在情況下,它會幫助別人,

爲了解決這個問題,我實現的ActionFilterAttribute,凡在我執行OnActionExecuting的我檢查如果模型狀態無效,做錯誤處理如果是這樣的話。

這就是執行動作之前和對象反序列化之後的位置。

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

     //Do error handling Stuff... 
    } 
}