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

时间:2013-12-07 19:34:36

标签: asp.net-web-api

我已经使用过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"
  • 在Google上搜索了必要的帮助here

有人可以指导我吗?

3 个答案:

答案 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方法时。