我是 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;
}
请详细澄清上述代码和方法的优缺点。 谢谢
-
这更多地与应用程序的设计以及您希望如何路由应用程序有关。例如,
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){}
-
PUT,DELETE都有副作用,即对数据的更改。您甚至可以将 POST 用于
Delete(..)
操作方法。在某些情况下,可能不支持 PUT 和 DELETE(大多数 Web 浏览器中是否支持 PUT、DELETE、HEAD 等方法?(,因此您必须改用 POST。
因此,同样,这取决于应用的设计,拥有多个 URI 允许您在不同的场景中使用它。大多数情况下,我只为每个操作方法使用一个 URI。