У меня есть интерфейс 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; }
}
Я звоню интерфейс, используя Breeze с клиентской стороны метаданных, используя расширения:
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
}
Breeze теперь распознает это как объект типа Object1. Но если я изменяю объект и сохраняю изменения, он делает POST-запрос http://example.com/api/BaseObject(1)
. Чтобы иметь возможность обрабатывать различные типы бетона, мне нужен запрос POST для перехода к конкретному контроллеру http://example.com/api/Object(1)
.
Что нужно изменить, чтобы Breeze делал для обновления POST-вызовов конкретному контроллеру, а не контроллеру базового объекта?
UPDATE: После проверки исходного кода Breeze, похоже, что Breeze использует odata.id как URI для запроса POST. Возможно ли, чтобы API OData возвращал URI для конкретного объекта как odata.id вместо базового объекта?