DELETE方法不工作(DELETE method not working)

2019-10-19 06:29发布

我写了包含删除客户端以下方法用的WebAPI控制器...

[HttpDelete]
public void DeleteClient(int id) {
  // do stuff here
}

......,我试图通过使用网页上的以下HTML来测试它...

<form method="DELETE" action="/api/ClientsXml/">
  <table style="padding: 5px">
    <tr>
      <td>ID</td>
      <td><input type="text" size="20" name="id" id="id" /></td>
    </tr>
    <tr>
      <td> </td>
      <td><input type="submit" value="Send" /></td>
    </tr>
  </table>
</form>

然而,DeleteClient方法不会被调用。 它穿过至GetClient方法代替该请求。

任何人任何想法,为什么? 我已经试过各种变体,但我只是不能称为删除方法。

Answer 1:

@ DimitryS的答案是正确的,但我想我会建立一点就可以了。

HTML表单只允许GET和POST操作。 这是在当前HTML 5规范以及该HTML <4规格。

其他HTTP方法使用时允许的XMLHttpRequest这是什么underlies jQuery的Ajax功能。 所以一个好的选择是使用jQuery你放,删除,并应在所有主要的浏览器中工作(在这个美丽的明确SO问题的一些讨论: 是PUT,DELETE,HEAD等方法可在大多数web浏览器? )。

最后,我会说,如果你只是使用的形式来测试你的API,那么为什么不尝试一个浏览器扩展,而不是:如

  • 邮递员铬
  • RESTClient实现用于Firefox

还有更多,但多数让您保存测试套件,设置不同的页眉,等等。



Answer 2:

浏览器通常只能执行GET或POST表单元素(除非你正在使用AJAX提交的话)。

你应该改变形式的方法发布和添加下面的HTML元素:

<input name="X-HTTP-Method-Override" type="hidden" value="DELETE" />

这就是MVC允许覆盖同步的POST HTTP方法的方式。

编辑:这篇文章介绍了如何使Web API支持相同的约定: https://stackoverflow.com/a/13135848/395359



文章来源: DELETE method not working