ASP.NET处理PUT / DELETE动词

时间:2012-06-22 11:43:26

标签: asp.net iis asp.net-web-api

这一般适用于ASP.NET,但也适用于Web API。

如何在没有启用RAMMFAR(RunAllManagedModulesForAllRequests)的情况下处理PUT / DELETE动词

我无法在IIS中配置处理程序映射,因为我的网站托管在Azure Web角色上,并且我所做的任何更改都不会保留。

3 个答案:

答案 0 :(得分:19)

@亚历山大的回答让我走上正轨。必须添加以下内容才能获得ASP.NET处理的DELETE / PUT:

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="false"/>
    <handlers>
      <remove name="ExtensionlessUrl-Integrated-4.0" />
      <add name="ExtensionlessUrl-Integrated-4.0" 
           path="*." 
           verb="GET,HEAD,POST,DEBUG,DELETE,PUT" 
           type="System.Web.Handlers.TransferRequestHandler" 
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

答案 1 :(得分:4)

FWIW,我们修改了MVC / Web API项目模板,以允许所有常见的HTTP动词完全使用上述机制。这一变化将在下一次正式下降(将是RTM)中提供。这将默认工作。

答案 2 :(得分:2)

已经尝试在web.config中的System.WebServer部分中允许使用动词吗?

这样的事情:

<System.WebServer>
     <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" 
        path="*." 
        verb="GET,HEAD,POST,DEBUG,PUT,DELETE" 
        modules="IsapiModule" 
        scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" 
        resourceType="Unspecified" 
        requireAccess="Script" 
        preCondition="classicMode,runtimeVersionv4.0,bitness64" 
        responseBufferLimit="0" />
    </handlers>
</System.WebServer>