我有一個WebAPI OData v3接口使用ODataConventionModelBuilder
。它含有可繼承了一些實體,並且還具有抽象對象的集合的模式:ODataConventionModelBuilder與繼承實體
public abstract class BaseObject
{
[Key]
public int Id { get; set; }
[ForeignKey("Object3")]
public int? ParentId { get; set; }
public virtual Object3 Parent { get; set; }
}
public class Object1: BaseObject
{
}
public class Object2: BaseObject
{
}
public class Object3
{
[Key]
public int Id { get; set; }
public ICollection<BaseObject> MyObjects { get; set; }
}
我打電話使用微風與客戶端的元數據接口,使用擴展:
http://example.com/api/Object3?$expand=MyObjects
服務器響應看起來是這樣的:
{
"odata.type":"MyNamespace.Object1",
"odata.id":"http://example.com/api/BaseObject(1)",
"[email protected]":"http://example.com/api/BaseObject(1)/Parent",
"Id":1,
"ParentId":1
}
微風可識別該類型Object1的實體。但是,如果我修改實體並保存更改,則會將POST請求發送到http://example.com/api/BaseObject(1)
。爲了能夠處理不同的具體類型,我需要POST請求去特定的控制器http://example.com/api/Object(1)
。
我需要改變什麼,以便Breeze使POST調用更新到具體控制器而不是基礎對象的控制器?
更新:在檢查Breeze源代碼後,它看起來像Breeze使用odata.id作爲POST請求的URI。是否有可能讓OData API將具體對象的URI作爲odata.id而不是基礎對象返回?