我正在實施ODataController
。它的OData V3由於兼容性原因,與Breeze.js:無法在OData控制器中序列化爲Delta <>
using System.Web.Http.OData;
public class OffersController : ODataMetadataController
{
...
Somwhere在我想要實現合併/補丁所看到的例子中:
[AcceptVerbs("PATCH", "MERGE")]
public IHttpActionResult Patch([FromODataUri] int key, Delta<BOOffer> delta)
{
...
出於某種原因,我得到了以下錯誤:
好的。 Delta<>
與OData相關,我需要一個OData格式化程序。
迭代通過格式化(as on this page),它似乎並沒有成爲一個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
我必須要註冊這個格式?它不應該是自動的嗎?如果我需要手動註冊它,如何?
如果我將輸入參數形式Delta<BOOffer>
更改爲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));