首页 > 解决方案 > OData WebAPI - 使用 XML 的补丁

问题描述

我正在调整我的 API 以使用 JSON 和 XML,但我注意到当我将它作为 XML 发送时 PATCH 端点没有接收实体作为参数(当我作为 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。

编辑

PATCH 端点中接受的 JSON 对象:

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

端点中为 null 的 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>

标签: c#asp.net-mvcasp.net-web-apiodata

解决方案


推荐阅读