c# - 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>
解决方案
推荐阅读
- python - 在数据框或 numpy 数组的列中进行数学运算
- google-analytics - 没有库的 Google Analytics 报告 API
- javascript - 如何使用函数的自定义输入在元素上添加 onclick 事件
- laravel - 如何从产品表中计算折扣
- android - 应用程序在前台时未收到推送通知
- android - 如何在另一个 ViewModel withKoin 中获取 ViewModel 实例
- python - 找到具有共同首尾字符的最长字符串链的最快方法是什么?
- asp.net-core - 使用 HttpContext 直接调用网络主机
- django - 在 Elastic Load Balancer 下使用 EC2 上的 Nginx 获取客户端 IP
- python - 通过 csv 导入水深测量并可视化大量水体