OData WebAPI - PATCH с использованием XML - PullRequest
0 голосов
/ 07 июня 2019

Я адаптирую свой API для работы с JSON и XML, но я замечаю, что конечная точка PATCH не получает объект в качестве параметра, когда я отправляю его как XML (работает отлично, когда я отправляю как JSON), он выглядит какнулевой объект.

Есть метод PATCH:

public IHttpActionResult Patch([FromBody]Delta<CargoDTO> deltaDto)
    {
        if (sandbox)
        {
            //var cargosMock = (List<CargoApiDTO>)new CargosExemplos().GetExamples();

            var cargoEdit = cargosMock.Where(x => x.Codigo == deltaDto.GetInstance().Codigo).FirstOrDefault();

            if (cargosMock == null)
                return NotFound();

            deltaDto.Patch(cargoEdit);

            var indx = cargosMock.IndexOf(cargoEdit);
            cargosMock.RemoveAt(indx);
            cargosMock.Add(cargoEdit);

            return Ok(cargoEdit);
        }

        _nexoControle.Cliente = Request.GetOwinContext().Get<string>("client_id");
        var codigo = deltaDto.GetInstance().Codigo;
        var dto = _nexoControle.ObterColecao().AsQueryable()
                                              .Where(cargo => cargo.Codigo == codigo)
                                              .ProjectTo<CargoDTO>()
                                              .FirstOrDefault();

        if (dto == null)
            return NotFound();

        deltaDto.Patch(dto);

        var obj = AutoMapper.Mapper.Map<Cargo>(dto);

        //_nexoControle.Atualizar(obj);

        return Ok(dto);
    }

Есть маршрут: builder.EntitySet<CargoDTO>("Cargo").EntityType.HasKey(dto => dto.Codigo);

Прежде чем кто-то спросит, клиент хочет работать с XML и JSON.

EDIT

Объект JSON, принятый в конечной точке PATCH:

{
  "Codigo": "Auxiliar Adm",
  "Nome": "Auxiliar Administrativo",
  "Periodicidade": null,
  "CBO": "000001",
  "Identificador": "101012",
  "Ativo": true,
  "CodigoTipoAtividadeProfissional": "01"
}

Объект XML, который имеет нулевое значение в конечной точке:

<?xml version="1.0"?>
<CargoDTO>
  <Codigo>cargoteste</Codigo>
  <Nome>Cargo Teste</Nome>
  <Periodicidade>aa</Periodicidade>
  <CBO>aa</CBO>
  <Identificador>AA01</Identificador>
  <Ativo>true</Ativo>
  <CodigoTipoAtividadeProfissional>AA01</CodigoTipoAtividadeProfissional>
</CargoDTO>
...