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
無效,order
是null
。
它不能是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);
}
有沒有人有這方面的想法?
有趣的是,該命令的補丁已經工作。我認爲當我們在啓動配置中改變了一些東西的時候,它就崩潰了。 –
:)最初支持實體補丁。 –
從這個問題來看,它聽起來像'Order' _is_一個實體,因爲它有一個'Id'屬性。 – lencharest