3

我是 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

4

2 回答 2

3

您的示例指出了更多的RPC 实现。REST 基于资源。每个资源都有它的方法。获取、更新、插入和删除。如果你打算在你的问题中说什么,你可以在你的 ASP.NET API 中毫无问题地做到这一点:(但请确保这不是REST)

更新(2018 年) 经过一段时间和经验(以及用户对这个旧答案的评论),我意识到说 OP 端点不是 Restfull 是错误的。正如我的示例已经显示的那样,可以轻松完成路线来实现这一目标。有趣的是,我们如何随着时间的推移学习和改变自己的想法/意见。:)

用户控制器

[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,您可以拥有任意数量的 HttpDelete。只需将属性放在操作的顶部,您就可以开始了。它还强制只能使用该 HTTP 动词调用方法。因此,在上面的 Delete 中,如果您使用 GET 动词进行调用,您将一无所获。(找不到动作)

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

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

于 2015-12-21T16:17:11.467 回答
1

Most of the information you require can be found here:

You can specify the HTTP method with an attribute: AcceptVerbs, HttpDelete, HttpGet, HttpHead, HttpOptions, HttpPatch, HttpPost, HttpPut. Otherwise, if the name of the controller method starts with "Get", "Post", "Put", "Delete", "Head", "Options", or "Patch", then by convention the action supports that HTTP method. If none of the above, the method supports POST.

The Uri will depend on the name of the controller: /api/controller-name/GetAllUsers

于 2013-06-21T12:03:35.670 回答