我编写了一个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方法。
任何人都知道为什么?我尝试了各种各样的变体,但我无法得到名为的删除方法。
答案 0 :(得分:1)
浏览器通常只能对表单元素执行GET或POST(除非您使用AJAX提交它)。
您应该将表单方法更改为POST并添加以下HTML元素:
<input name="X-HTTP-Method-Override" type="hidden" value="DELETE" />
这就是MVC允许覆盖同步POST的HTTP方法的方式。
编辑:这篇文章解释了如何使Web API支持相同的约定: https://stackoverflow.com/a/13135848/395359
答案 1 :(得分:1)
HTML表单只允许GET和POST操作。这是HTML 5 spec中的当前内容以及HTML&lt; 4规格
使用XMLHttpRequest时允许使用其他HTTP方法,这是jQuery的ajax功能的基础。所以一个很好的选择可能是将jQuery用于你的PUT,DELETE,它应该适用于所有主流浏览器(在这个非常明确的SO问题中对此进行一些讨论:Are the PUT, DELETE, HEAD, etc methods available in most web browsers?)。
最后,我会说,如果您只是使用表单来测试您的API,那么为什么不尝试使用浏览器扩展程序: 例如
还有更多,但大多数允许您保存测试套件,设置不同的标题,等等。