例如,假设我有以下用于通过Web API更新人员详细信息的模型:
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
在从浏览器发布此数据时,是否有任何标准规定如何构建此端点的API路由?
我需要:
[Route("people/person/{personId}")]
[HttpPost]
public IHttpActionResult SavePerson(int personId, Person personDetails)
或者我应该使用:
[Route("people/person")]
[HttpPost]
public IHttpActionResult SavePerson(Person personDetails)
如果 PersonId 为0,则假定这是新数据,因此将创建新记录,否则将执行更新。
答案 0 :(得分:1)
根据我的经验,发布(或PUt)复杂对象的最佳方法是:
[Route("people/person")]
[HttpPost]
public IHttpActionResult SavePerson([FromBody]Person personDetails){
// then you can check here if model is valid and if id is ont set ..then call insert CRUD method or UPDATE method..something like:
if(!ModelState.IsValid) return BadRequest(ModelState);
return Ok(personDetails.Id == 0 ? _repository.insert(personDetails) : _repository.update(personDetails));
}
希望它能帮到你..
用于描述内容的其他REST方法是PATCH
答案 1 :(得分:0)
不需要在后期操作中指定'[FromBody]'。如果api是复杂的对象,则只在表单体中发送数据。
[Route("people/person")]
[HttpPost]
public IHttpActionResult SavePerson(Person personDetails){
// then you can check here if model is valid and if id is ont set ..then call insert CRUD method or UPDATE method..something like:
if(!ModelState.IsValid) return BadRequest(ModelState);
return Ok(personDetails.Id == 0 ? _repository.insert(personDetails) : _repository.update(personDetails));
}