2015-10-20 35 views
0

我有一個或多或少簡單的CRUD功能的ODataController。 GET,POST和DELETE工作正常,但PATCH總是返回相同的錯誤:'ODataComplexTypeDeserializer' does not support Read.OData修補程序不能正常工作

這是ModelState Error。我的類和方法是這樣的:

[ODataRoutePrefix("Orders")] 
public class OrdersController : CommonODataController 
{ 
    ... 
    [HttpPatch] 
    [ODataRoute("({key})")] 
    public async Task<IHttpActionResult> Patch([FromODataUri] Int64 key, Delta<Order> order) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     if (order == null) 
     { 
      return BadRequest("Missing order patch information."); 
     } 
     // do patching stuff 
    } 
} 

所以調用PATCH當ModelState無效,ordernull

它不能是Order的複雜性,因爲我已經最小化Order,因此它只包含Id。我也嘗試過與其他實體。

做了一些研究後,我猜想它可能與JsonMediaTypeFormatter有關。 OWIN的配置是:

public void Configuration(IAppBuilder app) 
    { 
     // create the HttpConfiguration and do not use the GlobalConfiguration with OWIN 
     HttpConfiguration httpConfiguration = new HttpConfiguration(); 
     httpConfiguration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 
     app.UseCors(CorsOptions.AllowAll); 

     IUnityContainer container = new UnityContainer(); 

     // setup dependency injection and register interfaces 
     RegisterServices(container); 
     RegisterControllers(container); 

     // configure JSON formatters 
     JsonMediaTypeFormatter formatter = httpConfiguration.Formatters.JsonFormatter; 
     formatter.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Local; 
     //formatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
     formatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; 

     // register routes 
     WebApiConfig.Register(httpConfiguration);   
     ODataConfig.Register(httpConfiguration); 

     // setup dependency resolver 
     httpConfiguration.DependencyResolver = new UnityDependencyResolver(container); 

     app.UseWebApi(httpConfiguration); 
    } 

有沒有人有這方面的想法?

回答

0

從錯誤消息看來,您想修補複雜類型屬性。但是,目前在Web API OData中尚不支持該功能。看到相關問題: https://github.com/OData/WebApi/issues/135

謝謝。

+0

有趣的是,該命令的補丁已經工作。我認爲當我們在啓動配置中改變了一些東西的時候,它就崩潰了。 –

+0

:)最初支持實體補丁。 –

+0

從這個問題來看,它聽起來像'Order' _is_一個實體,因爲它有一個'Id'屬性。 – lencharest