1

У меня есть объект с составным первичным ключом, и я могу получить один экземпляр его с помощью:Как скомпоновать объект с составным первичным ключом?

GET https://example.com/service/Contacts(Foo=3,Bar=18) 

Как я могу обновить экземпляр этого? Я попробовал PATCH, используя тот же адрес:

PATCH https://example.com/service/Contacts(Foo=3,Bar=18) 

Но я получаю следующую ошибку:

{ 
    "error" : { 
     "code" : "", 
     "message" : "The request is invalid.", 
     "innererror" : { 
      "message" : "key : Expected literal type token but found token 'Foo'.\r\n", 
      "type" : "", 
      "stacktrace" : "" 
     } 
    } 
} 

Что означает эта ошибка?

Я также попытался без имен свойств, но я получаю другую ошибку:

PATCH https://example.com/service/Contacts(3,18) 

Cannot create an abstract class. Description: An unhandled exception occurred during the execution of the current web request. Please review the stacktrace for more information about the error and where it originated in the code.

Любую идею, как я могу сделать заплатку в этом случае?

спасибо.

ответ

0

Может быть, я слишком поздно, чтобы партии, но здесь он идет на PATCH

Обратите внимание, что это OData v6 (System.Web.OData) и Entity Framework с ручной настройки модели. Я думаю, что предыдущая версия OData не поддерживала это из коробки.

В контроллере патч действия должен иметь аргументы, состоящие из «ключа» + {ModelPropertyName}. Учитывая, что ваша модель имеет свойства Foo и Bar, действие контроллера должно быть следующим.

public async Task<IHttpActionResult> Patch([FromODataUri] int keyFoo, [FromODataUri] int keyBar, Delta<FooBarModel> modelDelta) 

Обратите внимание, что корпус на аргументах не имеет значения. Вы можете иметь их как KeyFoO, если хотите. Но это действительно имеет значение на URL-адресе

PATCH https://example.com/service/Contacts(Foo=3,Bar=18)

Здесь корпус - это вопрос. Это не будет работать

PATCH https://example.com/service/Contacts(foo=3,bar=18)

заказа не имеет значения, это будет работать

PATCH https://example.com/service/Contacts(Bar=18 , Foo=3)

Это не работает

PATCH https://example.com/service/Contacts(3,18)

 Смежные вопросы

  • Нет связанных вопросов^_^