复杂对象的REST API路由标准

时间:2017-01-18 14:05:48

标签: asp.net-web-api asp.net-web-api-routing

例如,假设我有以下用于通过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,则假定这是新数据,因此将创建新记录,否则将执行更新。

2 个答案:

答案 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));

        }