WebAPI:多个http动词可用于单个动作

时间:2017-06-09 08:59:37

标签: c# asp.net-web-api

我是web api的新手,我也不是一个非常先进的开发人员。我看过一篇文章,展示了我们如何使用多个http动词进行单一操作。

所以我想知道这种方法很好。否则,当有人使用多个http动词进行单个动作时会出现什么情况呢?

从此区域获取的代码https://www.codeproject.com/Articles/1005485/RESTful-Day-sharp-Security-in-Web-APIs-Basic#_Toc423441907

fl.jl:4 | m

1)在什么样的情况下,人们使用多个http动词进行单个动作,因为它们为单个动作创建了多个路径,可能会让人感到困惑.......应该接近以下是好还是不好?

[GET("allproducts")]
[GET("all")]
public HttpResponseMessage Get()
{ }

[GET("productid/{id?}")]
[GET("particularproduct/{id?}")]
[GET("myproduct/{id:range(1, 3)}")]
public HttpResponseMessage Get(int id)
{ }

[POST("Create")]
[POST("Register")]
public int Post([FromBody] ProductEntity productEntity)
{ }     

[PUT("Update/productid/{id}")]
[PUT("Modify/productid/{id}")]
public bool Put(int id, [FromBody] ProductEntity productEntity)
{ }

// DELETE api/product/5
[DELETE("remove/productid/{id}")]
[DELETE("clear/productid/{id}")]
[PUT("delete/productid/{id}")]
public bool Delete(int id)
{ }

2)PUT和DELETE是不同的动词。如何使用不同的动词进行单一动作....这是正确的方法。

[GET("productid/{id?}")]
[GET("particularproduct/{id?}")]
[GET("myproduct/{id:range(1, 3)}")]
public HttpResponseMessage Get(int id)
{}

请详细说明上述代码和方法的优点和含义。感谢

1 个答案:

答案 0 :(得分:0)

  1. 这更多地与您的应用程序的设计以及您希望如何路由应用程序有关。例如,particularproduct/{id?}用于获取任何产品之一,而myproduct/{id:range(1, 3)表示获取我的某个产品,而每个人最多只能有3个产品(这就是为什么有一个范围的原因)限制)。

       [GET("productid/{id?}")]
       [GET("particularproduct/{id?}")]
       [GET("myproduct/{id:range(1, 3)}")]
       public HttpResponseMessage Get(int id){}
    
  2. PUT,DELETE都有副作用,即数据更改。您甚至可以使用POST来Delete(..)操作方法。在某些情况下,PUT&可能不支持DELETE(Are the PUT, DELETE, HEAD, etc methods available in most web browsers?),因此您必须使用POST。

  3. 因此,它再次取决于您的应用程序的设计,并且拥有多个URI允许您在不同的场景中使用它。大多数时候,我只为每个动作方法使用一个URI。