ASP.NET Web API HTTP删除405方法不允许

ASP.NET web API HTTP Delete 405 Method Not Allowed

我已经使用了WebAPI,遇到了很多问题,比如发布多个参数。我升级到webapi2以使用路由属性,现在遇到如下问题:

"message":"The requested resource does not support http method 'DELETE'."

我花了一整天的时间搜索堆栈溢出和Web来解决这个问题:

  • 删除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"
  • 在谷歌搜索必要的帮助

有人能指导我吗?


我也有同样的问题。在web.config中添加以下代码可以解决system.webserver部分下的问题:

1
2
3
4
<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/>


我也有同样的问题,因为我的控制器是这样的:

1
2
3
4
5
[HttpDelete]
public HttpResponseMessage Delete(string Id)
{
     ....
}

在客户机上,我使用发送ID作为请求主体:

1
2
3
4
5
6
7
8
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参数时,它工作正常:

1
2
3
4
5
6
var url = '/api/upload/' + id; // <- In the URL
$.ajax({
    url: url,
    type: 'DELETE',
    contentType: 'application/json'
});


删除动词的javascript代码必须如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
$.ajax({
    **url:"/api/SomeController/" + id,**
    type:"DELETE",
    dataType:"json",
    success: function(data, statusText) {
        alert(data);
    },
    error: function(request, textStatus, error) {
        alert(error);
        debugger;
    }
});

不要用这种东西,

1
2
3
...
data: {id:id}
...

当你使用post方法的时候。


将此添加到我的Web API

1
2
3
4
    public HttpResponseMessage Options()
    {
        return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
    }

解决了我的问题。