无法序列化为增量<&燃气轮机;在OData控制器中
我正在实现一个无法序列化为增量<&燃气轮机;在OData控制器中,odata,breeze,asp.net-web-api2,http-patch,Odata,Breeze,Asp.net Web Api2,Http Patch,我正在实现一个ODataController。出于与以下兼容的原因,它是OData V3: 在中间,我想在例子中实现合并/补丁: [AcceptVerbs("PATCH", "MERGE")] public IHttpActionResult Patch([FromODataUri] int key, Delta<BOOffer> delta) { ... 我应该注册这个格式化程序吗?它不应该是自动的吗?如果我需要手动注册,如何注册 如果我将输入参数表单Delta更改为BO
ODataController
。出于与以下兼容的原因,它是OData V3:
在中间,我想在例子中实现合并/补丁:
[AcceptVerbs("PATCH", "MERGE")]
public IHttpActionResult Patch([FromODataUri] int key, Delta<BOOffer> delta)
{
...
我应该注册这个格式化程序吗?它不应该是自动的吗?如果我需要手动注册,如何注册
如果我将输入参数表单Delta
更改为BOOffer
,则会调用该方法,但由于只发送更改的属性,因此我无法使用该方法
我在app_start中配置控制器,如下所示:
System.Web.Http.OData.Builder.ODataConventionModelBuilder builderV3 = new System.Web.Http.OData.Builder.ODataConventionModelBuilder();
var entitySetConfigV3 = builderV3.EntitySet<BOOffer>("Offers");
entitySetConfigV3.EntityType.HasKey(o => o.ID);
config.Routes.MapODataServiceRoute(
routeName: "odata/v3",
routePrefix: "odata/v3",
model: builderV3.GetEdmModel(),
batchHandler: new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer));
System.Web.Http.OData.Builder.ODataConventionModelBuilder builderV3=new System.Web.Http.OData.Builder.ODataConventionModelBuilder();
var entitySetConfigV3=builderV3.EntitySet(“提供”);
entitySetConfigV3.EntityType.HasKey(o=>o.ID);
config.Routes.MapODataServiceRoute(
路由名称:“odata/v3”,
routePrefix:“odata/v3”,
模型:builderV3.GetEdmModel(),
batchHandler:new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer));
原因是在项目中引用了System.Web.Http.OData
(odatav3)和System.Web.OData
(odatav4),并且混淆了引用
System.Web.Http.OData.Formatter.ODataMediaTypeFormatter
未配置为能够序列化到System.Web.OData.Delta
使用toSystem.Web.Http.OData.Delta
按预期工作
在一个项目中引用不同的OData版本时要小心
JsonMediaTypeFormatter
CanReadType: True
CanWriteType: True
Base: BaseJsonMediaTypeFormatter
Media Types: application/json, text/json
XmlMediaTypeFormatter
CanReadType: True
CanWriteType: True
Base: MediaTypeFormatter
Media Types: application/xml, text/xml
FormUrlEncodedMediaTypeFormatter
CanReadType: False
CanWriteType: False
Base: MediaTypeFormatter
Media Types: application/x-www-form-urlencoded
JQueryMvcFormUrlEncodedFormatter
CanReadType: True
CanWriteType: False
Base: FormUrlEncodedMediaTypeFormatter
Media Types: application/x-www-form-urlencoded
System.Web.Http.OData.Builder.ODataConventionModelBuilder builderV3 = new System.Web.Http.OData.Builder.ODataConventionModelBuilder();
var entitySetConfigV3 = builderV3.EntitySet<BOOffer>("Offers");
entitySetConfigV3.EntityType.HasKey(o => o.ID);
config.Routes.MapODataServiceRoute(
routeName: "odata/v3",
routePrefix: "odata/v3",
model: builderV3.GetEdmModel(),
batchHandler: new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer));