405方法不允许PUT

5

我已经检查了所有配置,但没有一个正常工作。

GET和POST请求可以正常工作,但是使用PUT请求时,我收到了405错误消息。 我没有WebDEV。

以下是我的配置信息:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
    </modules>
    <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>
  </system.webServer>

这真是让我抓狂!

我已经参考了所有可用的建议,例如: Asp.NET Web API - 405 - HTTP verb used to access this page is not allowed - how to set handler mappings

enter image description here

即使我使用基本身份验证/Windows身份验证,禁用也没有任何区别。

[System.Web.HttpHttpPut] public override HttpResponseMessage Put(int id, Request entity) { .... }

注意:我刚刚在暂存服务器上测试通过了。但是,在我的计算机上无法工作... enter image description here

enter image description here

2个回答

7
你是否使用了正确的命名空间来装饰你的操作(HttpPut)?应该像这样:


[HttpPut]
public ActionResult ActionName() 
{
  //Your code
}

编辑:显然,iis express默认禁用了删除和放置操作。如果这只在iis express中发生,您可能会发现此答案有用。基本上,您需要编辑此文件:

%userprofile%\documents\iisexpress\config\applicationhost.config 

在这一行上:
<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

并添加PUT动词

编辑2:
根据这个回答:打开您的IIS管理器并选择您的网站。
单击右侧的处理程序映射链接。
找到ExtensionlessUrlHandler-Integrated-4.0条目并双击它。
在请求限制选项卡中,您可以添加PUT以启用PUT支持。


谢谢您回复。是的,它与System.Web.Http相关联。 - codebased
你能展示一下你的控制器代码吗?也许你有参数不匹配或者你正在针对错误的控制器/操作。 - Kristof
如果你已经尝试了所有的方法,那么不是真的没有办法了 :) 但是如果你有一些无限的操作留下来的话:你能告诉我你是使用IIS Express还是普通的IIS吗?你可以尝试使用相同的设置(例如IIS7)模仿暂存服务器,并查看是否有效,以确保问题是否真的与iis express有关。 - Kristof
哈哈 - 我稍后再试一次,吸点新鲜空气。 - codebased
天啊,我花了大约20个小时,而且我还没有为put使用id。我想把这个作为答案放上去,但这太傻了。我希望错误信息比“方法不允许”更好。PUT方法没问题。 - Michael Fulton
显示剩余9条评论

-1

您的浏览器默认方法设置为GET。您可以使用 Postman Chrome扩展程序来测试所有HTTP方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接