大多数REST方式用于更新记录

时间:2016-06-02 13:12:40

标签: c# asp.net-web-api asp.net-web-api2

Web api 2,目前这是我们处理POST的方式,PUT。我不知道这是否是最好的方法,因为没有PUT请求正文中的id是坏的?我对请求正文有验证,我应该单独验证id吗?

[HttpPost]
[Route("api/people")
public IHttpActionResult CreatePerson(PersonRequest request)
{

}

[HttpPut]
[Route("api/people/{id:int}")]
public IHttpActionResult UpdatePerson(int id, PersonRequest request)
{

}

public class PersonRequest
{
   public string Name;
   public string LastName;
}

你会怎么做?

2 个答案:

答案 0 :(得分:2)

你的路由对我来说似乎是对的。

您对PUT个请求是正确的:最好在URI中包含资源标识符。我还要做的是将它包含在资源表示(请求体)中,这样您可以进一步验证用户的意图是否真的要更新该特定资源(您应该检查URI中的id是否等于{来自身体的{1}}。

对于id方法,我建议您返回整个资源表示(包括正文中的POST),但您无需要求用户在其中添加id id请求正文(可能是POSTnull,甚至丢失)如果您在服务器端分配它。

答案 1 :(得分:1)

彼得: 我对你的设计的评论:

1)Id应该包含在PersonRequest类中

2)所以对于Create动作它应该是0,因为它是新对象,它将从DB获得“下一个Id值”

3)对于更新,您需要检查Id> 0和Id存在于系统中(在数据库中),否则抛出异常。

你的新班级:

public class PersonRequest
{
   public int Id;
   public string Name;
   public string LastName;
}

4)我会将PersonRequest类重命名为Person。