Неправильное поведение JayData с WebApi v2 Odata во время обновления объекта, вызывается конечная точка Patch

Пытаясь обновить объект, JayData запускает метод PatchEntity на серверной части WepAPI. Я считаю это недопустимым поведением, поскольку следует вызывать UpdateEntity.

Функции добавления и удаления объекта работают нормально. На бэкенде у меня есть контроллер, наследуемый от EntitySetController‹>

public class BaseODataController<TService, TEntity, TEntityDto, TIdentityType> : EntitySetController<TEntityDto, TIdentityType>
{
  //.....

        protected override TEntityDto UpdateEntity(TIdentityType key, TEntityDto update)
        {
            // is not getting called
            _service.Update(update);
            return base.UpdateEntity(key, update);
        }

        protected override TEntityDto PatchEntity(TIdentityType key, Delta<TEntityDto> patch)
        {
            // gets called
            return base.PatchEntity(key, patch);
        }


  //.....
}

Вот код, который вызывается на стороне клиента:

 vm.updateRole = function(r) {
        return $data.initService('/odata/$metadata').then(function (context) {
            r.Name = "NewUpdateRole";
            context.Role.update(r);
            r.entityState = $data.EntityState.Modified;
            context.saveChanges().then(function(result) {
                debugger;
            });

        });

Я что-то упустил здесь?


person CoffeeCode    schedule 16.01.2014    source источник


Ответы (1)


JayData отправляет запросы MERGE или PATCH на основе свойства dataServiceVersion конфигурации поставщика odata.

$data.initService('/odata/$metadata', {dataServiceVersion: '3.0'})

2.0 вызывает MERGE, а 3.0 заставляет запросы PATCH согласовываться с реализацией OData WCF Data Services.

Если это поведение не соответствует требованиям WebAPI OData, существует второй вариант настройки для определения типа запроса:

$data.initService('/odata/$metadata', {UpdateMethod: 'PATCH'})

Вы можете попробовать изменить HTTP-глагол с PATCH на UPDATE.

person Robesz    schedule 17.01.2014