从jqgrid调用asp.net web api DELETE的问题

我试图从jqGrid调用ASP.net WEB API的DELETE方法。 但是我收到消息 – “错误状态:’方法不允许’。错误代码:405”

以下是详细信息。

JQGrid代码 –

$("#employeeSalarysGrid").jqGrid('navGrid', '#employeeSalarysPager', { add: true, edit: true, del: true }, editOption, addOption, delOption); var delOption = { caption: "Delete", msg: "Delete selected record(s)?", bSubmit: "Delete", bCancel: "Cancel", mtype: "DELETE", url: 'http://localhost:50570/api/Test/' }; 

ASP.NET Web API方法:

 public HttpResponseMessage Delete(string id) { //code for processing delete request } 

我已经跟踪了使用Fiddler发送的请求。 以下是请求详细信息:

 DELETE http://localhost:50570/api/Test HTTP/1.1 Accept: */* Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Referer: http://localhost:53055/Views/Test.aspx Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko Host: localhost:50570 Content-Length: 13 Connection: Keep-Alive Pragma: no-cache oper=del&id=2 

请注意参数Id = 2是在请求正文中发送的,而不是查询字符串,我认为应该没问题。

请让我知道你为什么没有调用delete方法的原因。

您应该从DELETE请求中删除正文,并在URL的末尾附加id。 答案 (或旧 答案 )描述了实施细节。 我http://localhost:50570建议你从你使用的URL中删除http://localhost:50570前缀,例如url: '/api/Test/'而不是url: 'http://localhost:50570/api/Test/' 。 请参阅此处了解Ajax的限制。

由于您使用简单类型(字符串)作为方法参数,因此Web API无法路由请求。 像这样设置URI中的id – http://localhost:50570/api/Test/123 。 或者,将参数更改为复杂类型(类),Web API将正确开始路由,将body绑定到action方法参数。