HttpPost和HttpPut之间的MVC Web Api差异

时间:2016-04-28 06:33:56

标签: 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);
    }

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

[HttpPut][HttpPut]不应该使这些方法独一无二吗?

2 个答案:

答案 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并在命名方法时使用动词。

Method Naming Guidelines