我感谢所有帮助这个作为站点应该去住,今晚!
我有一个删除方法中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