HttpPost和HttpPut之间的MVC Web Api差异

Lor*_*ion 5 c# asp.net-web-api

我是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);
    }
Run Code Online (Sandbox Code Playgroud)

Howerver我的HttpPut方法说"已经用相同的参数类型来判断一个名为user的成员.

不应该[HttpPut][HttpPut]方法独特吗?

Naz*_*san 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);
}
Run Code Online (Sandbox Code Playgroud)

更相关的ans.检查一下. 在同一个Controller中具有相同Action名称的GET和POST方法


Ker*_*rla 7

当您有两个具有相同名称和相同签名的方法时,没有属性可以使您的方法唯一.

你的案例中的解决方案看起来像这样.

    [HttpPost]
    public bool User(userDTO postdata)
    {
        return dal.addUser(postdata);
    }

    [HttpPut]
    [ActionName("User")]
    public bool UserPut(userDTO postdata)
    {
        return dal.editUser(postdata);
    }
Run Code Online (Sandbox Code Playgroud)

PS:命名方法的惯例是你应该使用PascalCase并在命名方法时使用动词.

方法命名指南