必须为IIS设置哪些IIS处理程序映射才能使用web api 2?

时间:2015-10-22 21:09:02

标签: c# asp.net iis

尝试使用IIS发布新记录时出现500错误。

PUT工作,GET工作,只有POST导致500服务器错误。

在Visual Studio中使用IISExpress时,我不会收到错误。

这只会抛出我本地的IIS Web服务器。

在许多情况下,处理程序映射都有一个他们将接受的VERBS列表,默认情况下,其中很多都排除了POST动词。

我觉得这是我的问题所在。

我不想经历每一个猜测。

处理程序映射中一定存在问题,但我不知道必须设置哪些处理程序映射。

可以在我的应用程序Web配置中完成,而不是配置IIS吗?

<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
</modules>

<handlers accessPolicy="Read, Script">
        <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" />
  <!--add name="WebDAV" path="*" verb="*" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /-->
</handlers>

如何编辑或配置IIS以向我提供更多详细信息?

1 个答案:

答案 0 :(得分:0)

以下是Web Api 2.0的基本处理程序。

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit"/>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit"/>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0"/>
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0"/>
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
    </handlers>
  </system.webServer>

另外,为了确保,您应该发布带​​有该500错误的异常消息。我相信你会发现一些更详细的东西。

此外,您可能需要告诉IIS返回更详细的信息。您通常会将以下条目添加到we.config的配置部分。

  <system.web>
    <customErrors mode="Off"/>
    <compilation debug="true"/>
  </system.web>