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



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

所以我想知道这种方法是好的。否则,当有人对单个动作使用多个 http 动词时,还有什么更糟的呢?

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

[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)
{ }

1(在什么样的情况下,人们为单个动作使用多个http动词,因为他们为单个动作创建了多个路由,这可能会使人们感到困惑......下面的方法应该好不好吗?

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

2(PUT 和 DELETE 是不同的动词。如何为单个动作使用不同的动词....这是正确的方法。

[DELETE("remove/productid/{id}")]
[DELETE("clear/productid/{id}")]
[PUT("delete/productid/{id}")]
public bool Delete(int id)
{
 if (id > 0)
     return _productServices.DeleteProduct(id);
 return false;
}

请详细澄清上述代码和方法的优缺点。 谢谢

  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(大多数 Web 浏览器中是否支持 PUT、DELETE、HEAD 等方法?(,因此您必须改用 POST。

因此,同样,这取决于应用的设计,拥有多个 URI 允许您在不同的场景中使用它。大多数情况下,我只为每个操作方法使用一个 URI。

相关内容

  • 没有找到相关文章