MVC 4. IIS 7.5 PUT 返回 405
Posted
技术标签:
【中文标题】MVC 4. IIS 7.5 PUT 返回 405【英文标题】:MVC 4. IIS 7.5 PUT returning 405 【发布时间】:2012-08-29 20:53:39 【问题描述】:我正在尝试在 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 仍然没有运气
【问题讨论】:
【参考方案1】:投入我的 2 美分...在 iis 下单击我的网站会显示“WebDAV 创作规则”作为“IIS”下的最后一个条目。双击显示“WebDAV 功能已被禁用”。右侧有警报,并且有一个“启用 WebDAV”的链接,但它仍然不起作用。我按照上面 Stanomatic 的建议,处理程序部分无关紧要,我的模块看起来像这样:
<modules runAllManagedModulesForAllRequests="true" />
我刚刚在其中添加了 remove 并解决了我的问题:
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
【讨论】:
【参考方案2】:我的托管服务提供商无法卸载 WebDAV,因为这会影响所有人。
这个 runAllManagedModulesForAllRequests="true" 有效,但不推荐。
许多修复包括删除 WebDAVModule 的模块,但这仍然不起作用。我也删除了处理程序,最后我可以使用所有动词 POST GET PUT DELETE。
删除模块和处理程序中的 WebDAVModule 和 WebDAV。
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
【讨论】:
我的 web.config 已经有了 runAllManagedModulesForAllRequests="true"。添加上面的删除 WebDAV 行对我来说效果很好。 我以为我已经这样做了,但我只删除了处理程序 - 而不是模块。谢谢!【参考方案3】:正如我上面所说,我正在使用 WebAPI,看起来 WebAPI 对哪些动词映射到哪些方法很“挑剔”。我最终不得不将 [HttpXXX] 属性(HttpPut、Get、Delete 和 Post)添加到适当的方法中,以使路由按预期工作。
【讨论】:
以上是关于MVC 4. IIS 7.5 PUT 返回 405的主要内容,如果未能解决你的问题,请参考以下文章
IIS 7.5 405 方法不允许从 StaticFileModule 进行 PUT
Spring MVC PUT 请求返回 405 Method Not Allowed