如何在IIS中禁用或删除DirectoryListingModule以防止HTTP 405错误

时间:2016-04-19 15:00:18

标签: asp.net iis-7.5

我用自定义HTTP处理程序编写了一个ASP.Net Web应用程序。但是,在将应用程序导入IIS 7.5后,IIS会在调用应用程序时返回此信息:

HTTP/1.1 405 Method Not Allowed

当我启用失败请求跟踪规则功能来捕获HTTP 405错误时,我看到:

enter image description here

我的处理程序不会被调用。所以我想删除DirectoryListingModule。但是,类似于@Brendan Hill here,我尝试的任何东西似乎都禁用了该模块。甚至在C:\ Windows \ System32 \ inetsrv \ Config \ applicationHost.config中注释掉所有提及此模块的行都不起作用:

<!--add name="DirectoryListingModule" image="%windir%\System32\inetsrv\dirlist.dll" /-->
<!--add name="DirectoryListingModule" lockItem="true" /-->
<!--add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" /-->

与@Brendan Hill一样,我更喜欢我的应用程序的Web.config中的解决方案,所以我不必摆弄IIS的设置。摘自我当前的Web.config:

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="AuthServiceHandler"
           path="*."
           verb="*"
           type="AuthServiceHTTPHandler.App_Code.AuthServiceHandler"
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

如果我将我的应用程序导入IIS中的默认网站并将其绑定到9000,我可以使用POST请求调用该应用程序http://localhost:9000。这个网址很好;我不是要求任何网页。

1 个答案:

答案 0 :(得分:1)

最后,我通过创建一个虚拟网页并将处理程序绑定到我感兴趣的POST动词的处理程序来解决这个问题:

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="AuthServiceHandler"
           path="dummy.html"
           verb="POST"
           type="AuthServiceHTTPHandler.App_Code.AuthServiceHandler"
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

然后会触发处理程序以调用http://localhost:9000/Auth/dummy.html,其中Auth是我在IIS中的默认网站下部署时的应用程序名称。 (我没有意识到当我发布上面的问题时我也需要上下文。)所以DirectoryListingModule被有效地绕过了。

通过将处理程序绑定到POST动词,只有当用户在Web浏览器中浏览它时,才能使用相同的“虚拟”网页为用户提供有用的信息(因为浏览器发送的GET请求赢得了'被处理者拦截。

无需更改IIS设置。这对我在Windows 7上使用IIS 7.5起作用。