的WebAPI删除不工作 - 405不允许的方法(WebAPI Delete not workin

2019-07-23 06:42发布

我感谢所有帮助这个作为站点应该去住,今晚!

我有一个删除方法中web API控制器。 该方法只要我把它部署到服务器停止工作,并引发以下错误消息实时IIS服务器(Windows Server 2008 R2)执行我运行IIS快递(Windows 8中),但本地计算机上的罚款:

HTTP错误405.0 -不允许的方法您正在寻找的,因为正在使用无效的方法(HTTP动词)是无法显示该网页

我已经看过网上的解决方案周围,我实现最合理的。 我的web配置具有以下设置:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
<handlers>
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>

我也试图在IIS中改变处理程序映射,并请求筛选无济于事。 请注意,WebDAV创作规则在IIS中似乎被禁用。

任何想法将不胜感激感谢。

Answer 1:

我找到了解决办法,最终! 如果你遇到了同样的问题,以下内容添加到你的web.config

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/> <!-- ADD THIS -->
    </modules>
    ... rest of settings here

我希望这有帮助



Answer 2:

在某些情况下,刚刚从模块移除它可以产生一个错误:

500.21处理程序“的WebDAV”在其模块列表中坏模块“WebDAVModule”

模块:IIS Web核心通知:ExecuteRequestHandler”

解决方案建议在这里 。 还需要从处理程序中移除。

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
    <handlers>
        <remove name="WebDAV" />
    </handlers>
</system.webServer>


Answer 3:

在我的情况下上述解决方案均未的是工作。 这是因为我在我的改变参数的名称 Delete方法。

我有

public void Delete(string Questionid)

代替

public void Delete(string id)

我需要使用的id名称,因为这是在我的声明的名字WebApiConfig文件。 注意id在第三和第四行名称:

            config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

从我得到这个解决方案在这里 。



Answer 4:

的JavaScript HTTP DELETE动词必须是这样的:

$.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方法。



Answer 5:

我也有同样的问题,我打电话的WebAPI,并收到此错误。 添加下面的配置在web.config中对服务解决我的问题

    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/> <!-- add this -->
    </modules>

在web.config文件解决我的问题。 这是我如何从客户端调用

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri(environment.ServiceUrl);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    HttpResponseMessage response = client.DeleteAsync("api/Producer/" + _nopProducerId).Result;
    if (response.IsSuccessStatusCode)
    {
        string strResult = response.Content.ReadAsAsync<string>().Result;
    }
}


Answer 6:

去的applicationHost.config(通常在C:\ WINDOWS \ SYSTEM32 \ INETSRV \ CONFIG)文件和注释掉的applicationHost.config下面一行

1)在<搬运车>:

<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />

2)也注释掉以下模块被通过上述处理程序下称为<模块>

<add name="WebDAVModule" />


Answer 7:

这里试图几乎每一个解决方案,在此之后为我工作。 在API配置文件中添加这

<system.webServer>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
</system.webServer>


Answer 8:

我有405错误不允许的方法,因为我已经省略,使上的WebAPI控制器公众Delete方法。

我花了很长时间才找到这个(太长了!),因为我本来期望在这种情况下,未找到错误,所以我错误地认为我删除方法被拒绝。

之所以不允许,而不是找不到,是我也对同一个路由Get方法(REST实现时,这将是正常情况)。 公众获取功能由路由匹配,然后拒绝,因为错误的HTTP方法。

一个简单的错误,但我知道它可以节省别人一些时间。



Answer 9:

我想补充。 如果这是你的配置

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }

请继续做如雨果说,不设置路由属性控制器get方法,这给了我的情况的问题。



Answer 10:

就我而言,我错过了加{id}[Route("")] ,我得到了同样的错误。 并称,固定我的问题: [Route("{id}")]



Answer 11:

在删除方法的顶部[HttpPost]属性解决了这个问题对我来说:

[HttpPost]
public void Delete(int Id)
{
  //Delete logic
}


Answer 12:

我有类似的问题,但是对于PUT - 没有为我工作的其他建议。

但是我是用int而不是默认的string的ID。 加入{id:int}到路由解决我的问题。

    [Route("api/Project/{id:int}")]
    public async Task<IHttpActionResult> Put(int id, [FromBody]EditProjectCommand value)
    {
       ...
    }


Answer 13:

我们必须自定义页眉加入到我们的web.config作为我们的要求有这样的困惑API响应多个标头。

<httpProtocol>
    <customHeaders>
        <remove name="Access-Control-Allow-Methods" />
        <remove name="Access-Control-Allow-Origin" />
        <remove name="Access-Control-Allow-Headers" />
    </customHeaders>
</httpProtocol>


文章来源: WebAPI Delete not working - 405 Method Not Allowed