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;
}
你会怎么做?
答案 0 :(得分:2)
你的路由对我来说似乎是对的。
您对PUT
个请求是正确的:最好在URI中包含资源标识符。我还要做的是将它包含在资源表示(请求体)中,这样您可以进一步验证用户的意图是否真的要更新该特定资源(您应该检查URI中的id
是否等于{来自身体的{1}}。
对于id
方法,我建议您返回整个资源表示(包括正文中的POST
),但您无需要求用户在其中添加id
id
请求正文(可能是POST
,null
,甚至丢失)如果您在服务器端分配它。
答案 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。