1

我正在使用 VS 2010 中的WCF REST 模板为我的应用程序构建 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 上的发布服务器的行为。)

4

1 回答 1

1

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

  1. 删除 WebDAV 处理程序
  2. 为 ExtensionlessUrlHandler 添加 PUT 和 DELETE 动词

(这是一个占位符,用于启用下面的降价代码视图)

<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>
于 2012-09-26T19:12:06.890 回答