在Web API类中,为每种方法设置或不使用“Http”标记的目的是什么?

时间:2013-08-05 16:51:55

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

有什么区别:

[HttpDelete]
public void deleteNotification(int userId, int notificationId)
{
    Home.DeleteNotification(notificationId, userId);
}

public void deleteNotification(int userId, int notificationId)
{
    Home.DeleteNotification(notificationId, userId);
}

您是否应该使用这些标签?为什么或为什么不呢?

2 个答案:

答案 0 :(得分:2)

两者都称为HTTP方法,来自link

  

HTTP方法。框架仅选择与请求的HTTP方法匹配的操作,确定如下:

     

您可以使用以下属性指定HTTP方法:

     
      
  1. AcceptVerbs,HttpDelete,HttpGet,HttpHead,HttpOptions,HttpPatch,HttpPost或HttpPut。

  2.   
  3. 否则,如果控制器方法的名称以“Get”,“Post”,“Put”,“Delete”,“Head”,“Options”或“Patch”开头,那么按惯例action支持HTTP方法。

  4.   
  5. 如果不是上述方法,则该方法支持POST。

  6.   

因此,只要您的方法在您的操作中具有属性[HttpDelete]或前缀delete,它仍然有效。

答案 1 :(得分:0)

不同之处在于第一个操作只接受带有DELETE方法的请求,而第二个操作将接受任何方法的请求(GET,POST,PUT,DELETE,HEAD,OPTIONS或PATCH)。

您的操作将适用于您使用它的方式,对于它应如何处理不正确的请求最重要。有时会有一些糟糕的机器人/脚本通过执行诸如获取他们可以找到的任何URL并向其发送内容来扫描站点的漏洞。如果操作只接受单个请求方法,那么大多数垃圾请求将返回HTTP 404而不是因为输入值错误而导致异常(或更糟)。