У меня есть OData Web API с кучей различных объектов и навигационных свойств. Из того, что я понимаю, правильный способ удалить связь между двумя объектами - использовать следующий вызов. Это удалит элемент 456 из корзины 123:
DELETE: http://localhost:61506/odata/shoppingCarts(123)/items/$ref?$id=456
Это также приемлемый способ:
DELETE: http://localhost:61506/odata/shoppingCarts(123)/items/$ref?$id=http://localhost:61506/odata/items(456)
Метод выглядит следующим образом и отлично работает:
public IHttpActionResult DeleteRef([FromODataUri] int key, string navigationProperty, [FromODataUri] string relatedKey)
{
...
}
Что я пытаюсь выяснить, как будет выглядеть этот вызов, если объект "item" имеет составной ключ?
public class Item
{
[Key]
public string Id { get; set; }
[Key]
public string Source { get; set; }
}
Я мог бы вызвать следующее, чтобы получить элемент с составным ключом:
http://localhost:61506/odata/items(id='123',source='abc')
Я предполагаю, что следующее должно работать, но я не могу заставить работать маршрутизацию :
DELETE: http://localhost:61506/odata/shoppingCarts(123)/items/$ref?$id=http://localhost:61506/odata/items(id='123',source='abc')
Я также не уверен, как должен выглядеть первый вызов ссылки на удаление. Я пробовал некоторые из них:
DELETE: http://localhost:61506/odata/shoppingCarts(123)/items/$ref?$id=123&$source=abc
DELETE: http://localhost:61506/odata/shoppingCarts(123)/items/$ref?$id=(id='123',source='abc')
Я что-то упустил где-то, я просто не уверен, как должен выглядеть вызов, а метод маршрутизации и метод должны принимать входящий запрос.