如何在RESTful服务中添加多个Get Post和Delete方法

时间:2013-06-21 11:44:29

标签: rest asp.net-mvc-4 asp.net-web-api

我是REST服务的新手,想知道如何添加多个Get / Post / Delete方法。

例如 我们有以下获取方法: -

GetAllUsers()
GetUserByID(int id)
GetUserByName(string name)

同样,删除方法: -

DeleteAllUsers()
DeleteUserByID(int id)
DeleteUserByName(string name)

邮寄/投票方法: -

PutCreateDefaultUser()
PutCreateUser(User user)
PutCreateMultipleUsers(User[] users)

那么如何在上面的例子中定义Get / Delete / Post / Put方法。这个名字是自己说的是get / delete / put / post

另外如何为每个设置uri模板?

每种方法的URI是什么?

注意:我使用的是MVC4 .Net Web API项目,我没有使用WCF

2 个答案:

答案 0 :(得分:2)

您的示例指出更多RPC implementation。 REST基于资源。每种资源都有自己的方法。获取,更新,插入和删除。如果您计划在问题中使用所述内容,则可以在ASP.NET API中执行此操作而没有问题:(但请确保这是 REST)

更新(2018年) 经过一段时间和经验(以及用户评论这个旧答案后),我意识到说OP端点不是Restfull是错误的。正如我的例子所示,可以很容易地完成这些路线。有趣的是我们如何随着时间学习和改变自己的想法/意见。 :)

<强> UserController中

[RoutePrefix("api/v1")]
public class UserController : ApiController
{

    [HttpGet]
    [Route("users")]
    public HttpResponseMessage GetAllUsers()
    {
        ...
    }

    [HttpGet]
    [Route("users/{id:int}")]
    public HttpResponseMessage GetUserByID(int id)
    {
        ...
    }

    [HttpGet]
    [Route("users/{name:string}")]
    public HttpResponseMessage GetUserByName(string name)
    {
        ...
    }

    [HttpDelete]
    public HttpResponseMessage DeleteAllUsers()
    {
        ...
    }

    [HttpDelete]
    [Route("users/{id:int}")]
    public HttpResponseMessage DeleteUserByID(int id)
    {
        ...
    }
}

使用HttpAttributes,您可以拥有所需的HttpDeletes。只需将属性放在动作的顶部,就可以了。它还强制执行,只能使用该HTTP谓词调用这些方法。所以在上面的删除中,如果你使用GET动词进行调用,你什么也得不到。 (将无法找到该动作)

如果您愿意,也可以明确地为您的操作提供自定义路线。例如,您对GetUserByID的调用将是:

获取:http://localhost:2020/api/v1/users/1

答案 1 :(得分:0)

您可以在此处找到您需要的大部分信息:

  

您可以使用以下属性指定HTTP方法:AcceptVerbs,HttpDelete,HttpGet,HttpHead,HttpOptions,HttpPatch,HttpPost,HttpPut。   否则,如果控制器方法的名称以“Get”,“Post”,“Put”,“Delete”,“Head”,“Options”或“Patch”开头,则按照惯例,该操作支持该HTTP方法。   如果不是上述方法,则该方法支持POST。

Uri将取决于控制器的名称: / API / 控制器名称 / GetAllUsers