REST服务中带有PUT请求的HTTP 404

时间:2012-09-25 21:01:27

标签: wcf rest url-routing asp.net-4.0 wcf-rest

我正在使用VS 2010中的WCF REST template为我的应用构建RESTful Web服务。我已经完成了所有的GET,但我现在正在尝试处理更新,并且即使它出现在帮助文件中,我仍然在PUT上获得404.

截断web.config

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="UrlRoutingModule"
         type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </modules>
  <validation validateIntegratedModeConfiguration="true" />
  <handlers>
    <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" />
  </handlers>
</system.webServer>
<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  <standardEndpoints>
    <webHttpEndpoint>
      <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" />
    </webHttpEndpoint>
  </standardEndpoints>
</system.serviceModel>

如您所见,所有动词都为UrlRoutingHandler启用。我错过了什么?

(请注意,我使用的是IIS 7,但我不得不在经典模式下运行应用程序池,以模拟IIS 6上的发布服务器的行为。)

1 个答案:

答案 0 :(得分:1)

经过多次故障排除后,以下两个配置更改的组合似乎已修复它。

  1. 删除WebDAV处理程序
  2. 为ExtensionlessUrlHandler添加PUT和DELETE谓词
  3. (这是一个占位符,可以在下面启用降价代码视图)

    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE"
           modules="IsapiModule" scriptProcessor="c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll"
           resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness32"
           responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" 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>