我已经使用过Web API,并且遇到了很多问题,例如发布多个参数。我升级到WebApi2以使用路由属性,现在遇到如下问题:
"message":"The requested resource does not support http method 'DELETE'."
我花了一整天时间搜索Stack Overflow和网络来解决问题:
webdav
http protocol
允许所有get,put,post,delete
[HTTPDelete]
属性name="ExtensionlessUrlHandler-Integrated-4.0" path="*."
verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0"
有人可以指导我吗?
答案 0 :(得分:19)
我遇到了同样的问题。将以下代码添加到您的web.config应该可以解决system.webserver
部分下的问题:
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
答案 1 :(得分:10)
我遇到了同样的问题,因为我的控制器是这样的:
[HttpDelete]
public HttpResponseMessage Delete(string Id)
{
....
}
在客户端我使用发送ID作为请求正文:
var url = '/api/upload';
var data = JSON.stringify({ 'Id': id }); // <-- In the body
$.ajax({
url: url,
type: 'DELETE',
data: data, // <-- in the body
contentType: 'application/json'
})
当我更改客户端以将其用作URL参数时,它可以工作:
var url = '/api/upload/' + id; // <- In the URL
$.ajax({
url: url,
type: 'DELETE',
contentType: 'application/json'
});
答案 2 :(得分:2)
DELETE动词的JavaScript代码必须如下:
$.ajax({
**url: "/api/SomeController/" + id,**
type: "DELETE",
dataType: "json",
success: function(data, statusText) {
alert(data);
},
error: function(request, textStatus, error) {
alert(error);
debugger;
}
});
不要使用这样的东西,
...
data: {id:id}
...
当您使用POST方法时。