我是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
答案 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的调用将是:
答案 1 :(得分:0)
您可以在此处找到您需要的大部分信息:
您可以使用以下属性指定HTTP方法:AcceptVerbs,HttpDelete,HttpGet,HttpHead,HttpOptions,HttpPatch,HttpPost,HttpPut。 否则,如果控制器方法的名称以“Get”,“Post”,“Put”,“Delete”,“Head”,“Options”或“Patch”开头,则按照惯例,该操作支持该HTTP方法。 如果不是上述方法,则该方法支持POST。
Uri将取决于控制器的名称: / API / 控制器名称 / GetAllUsers