我正在尝试在MVC 4应用程序中使用PUT,我收到405错误。
在我的路由中,我对允许PUT和POST的路由有约束,POST到端点工作,PUT失败,带有405.
我已按照此处的建议ASP.NET Web API returns 404 for PUT only on some servers和此处ASP.NET MVC got 405 error on HTTP DELETE request?
我也从IIS中删除了WeDAV,但我仍然得到405.还有其他任何建议吗?
我在IIS 8(使用Visual Studio 2012)上也遇到了完全相同的问题,因为我遵循了这个建议ASP.NET Web API - PUT & DELETE Verbs Not Allowed - IIS 8但仍然没有运气
答案 0 :(得分:25)
我的托管服务提供商无法卸载WebDAV,因为这会影响所有人。
这个,runAllManagedModulesForAllRequests =“true”,有效但不推荐。
许多修复包括删除WebDAVModule的模块,但仍然无效。我也删除了处理程序,最后我可以使用所有动词POST GET PUT DELETE。
删除模块和处理程序中的WebDAVModule和WebDAV。
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
答案 1 :(得分:1)
正如我上面所说,我正在使用WebAPI,看起来WebAPI对于哪些动词映射到哪些方法都很“挑剔”。我最终不得不将[HttpXXX]属性(HttpPut,Get,Delete和Post)添加到适当的方法中,以使路由按照我的预期运行。
答案 2 :(得分:0)
投入我的2美分...点击iis下的我的网站显示'WebDAV创作规则'作为'IIS'下的最后一个条目。双击显示“WebDAV功能已被禁用”。在右侧发出警报,并且有一个“启用WebDAV”的链接,但它仍然无法正常工作。我按照上面的Stanomatic建议,处理程序部分没关系,我的模块看起来像这样:
<modules runAllManagedModulesForAllRequests="true" />
我刚刚在其中添加了删除并解决了我的问题:
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>