Удалить ссылку с составным ключом в OData Web API - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть 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')

Я что-то упустил где-то, я просто не уверен, как должен выглядеть вызов, а метод маршрутизации и метод должны принимать входящий запрос.

...