我是MVC Web Api的新手。
我想要两种不同的方法。
PUT localhost/api/user
- 修改用户
POST localhost/api/user
- 添加用户
所以我的ApiController
看起来像这样:
[HttpPost]
public bool user(userDTO postdata)
{
return dal.addUser(postdata);
}
[HttpPut]
public bool user(userDTO postdata)
{
return dal.editUser(postdata);
}
Howerver我的HttpPut方法说"已经用相同的参数类型来判断一个名为user的成员。
[HttpPut]
和[HttpPut]
不应该使这些方法独一无二吗?
答案 0 :(得分:8)
HttpPost和HttpPut之间的MVC Web Api差异
HTTP PUT
应该接受请求的正文,然后将其存储在URI
标识的资源中。
HTTP POST
更为通用。它应该在服务器上启动一个动作。该操作可以将请求正文存储在URI
标识的资源中,也可以是不同的URI,也可以是不同的操作。
PUT就像文件上传一样。对URI的放置会完全影响该URI。对URI的POST可能会产生任何影响。
已经定义了一个名为user的成员,其参数类型相同
在同一范围内不能有多个具有相同签名的方法,例如相同的返回类型和参数类型。
[HttpPost]
public bool User(userDTO postdata)
{
return dal.addUser(postdata);
}
[HttpPut]
[ActionName("User")]
public bool UserPut(userDTO postdata)
{
return dal.editUser(postdata);
}
更多相关的问题。检查一下。 GET and POST methods with the same Action name in the same Controller
答案 1 :(得分:6)
如果有两个具有相同名称和相同签名的方法,则没有属性可以使您的方法唯一。
您案例中的解决方案看起来像这样。
[HttpPost]
public bool User(userDTO postdata)
{
return dal.addUser(postdata);
}
[HttpPut]
[ActionName("User")]
public bool UserPut(userDTO postdata)
{
return dal.editUser(postdata);
}
P.S:命名方法的惯例是你应该使用PascalCase并在命名方法时使用动词。