我写了包含删除客户端以下方法用的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方法代替该请求。
任何人任何想法,为什么? 我已经试过各种变体,但我只是不能称为删除方法。
@ DimitryS的答案是正确的,但我想我会建立一点就可以了。
HTML表单只允许GET和POST操作。 这是在当前HTML 5规范以及该HTML <4规格。
其他HTTP方法使用时允许的XMLHttpRequest这是什么underlies jQuery的Ajax功能。 所以一个好的选择是使用jQuery你放,删除,并应在所有主要的浏览器中工作(在这个美丽的明确SO问题的一些讨论: 是PUT,DELETE,HEAD等方法可在大多数web浏览器? )。
最后,我会说,如果你只是使用的形式来测试你的API,那么为什么不尝试一个浏览器扩展,而不是:如
- 邮递员铬
- RESTClient实现用于Firefox
还有更多,但多数让您保存测试套件,设置不同的页眉,等等。
浏览器通常只能执行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