configuration - 错误 : IIS7 managed requests

标签 configuration iis-7 httpmodule

(我不知道我是否也应该将这个问题发布到 ServerFault,因为它是关于 IIS 配置的?)

在 IIS7 中,我们可以通过以下方式告诉模块为托管内容运行(从而加速静态内容服务):

<modules>
    ...
    <add name="WhateverName"
         type="WhateverType"
         preCondition="managedHandler"
    ...
</modules>

但。只要请求的 URL 中还有一个文件名(带扩展名),它就可以正常工作。如果省略它,IIS7 会认为您需要静态内容,并且托管模块将不会运行。
http://localhost/ <-- this one will skip managed handlers
http://localhost/default.aspx <-- this one will run them

如果我手动设置IIS7默认文档,那么第一个是default.aspx ,我看不出区别没有区别。对我来说,这看起来、走路和听起来都像是一只 bug 。 这是一个错误! 为什么?因为当我请求第一个请求时,它是一个托管请求,不是吗。当然是的。但 IIS7 将其视为静态请求。所以? 这是一个错误 .此请求应被视为受管理的。

如何说服 IIS7 为没有文件名的 URL 请求运行托管处理程序?

帮助思考

让我帮你思考一下:如果我重新排序 system.webServer/handlers ,我肯定可以解决这个问题。在最后 StaticFile 之前指向 StaticFileModule 的处理程序, DefaultDocumentModuleDirectoryBrowsingModule我应该在目录请求上运行集成的 asp.net 处理程序。或者编写我自己的处理程序,它将默认文档附加到任何目录请求。我很确定其中之一应该可以解决它。但是我将如何配置/开发它?

最佳答案

问题在于请求处理顺序。 IIS7 按照 IIS 的 Handlers 配置元素指定的顺序处理请求。默认情况下,IIS 配置的 Handlers 元素包含

<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />

在处理程序的末尾。因此,与任何先前指定的处理程序不匹配的所有请求都将由该处理程序处理(也包括文件夹请求)。

您可以使用 删除所有默认处理程序清除 中的元素处理程序 配置并指定您自己的请求处理顺序。

我建议将默认 IIS 处理程序配置 (C:\Windows\System32\inetsrv\config\applicationHost.config) 复制到您的 Web 配置,最后不使用 StaticFile 处理程序。

然后,您应该为每种静态内容类型(jpg、gif、js、css)添加特定的静态内容处理程序。
<add name="StaticFile-swf" path="*.swf" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
<add name="StaticFile-png" path="*.png" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
<add name="StaticFile-gif" path="*.gif" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
<add name="StaticFile-jpg" path="*.jpg" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
<add name="StaticFile-css" path="*.css" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
<add name="StaticFile-js" path="*.js" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />

之后管理文件夹请求的处理程序(PageHandlerFactory)。
<add name="PageHandlerFactory-Folders" path="*" verb="*" type="System.Web.UI.PageHandlerFactory" modules="ManagedPipelineHandler" resourceType="Unspecified" requireAccess="Read" allowPathInfo="false" preCondition="integratedMode" />

最后,您还应该添加 StaticFile 处理程序。

Here是一个例子。

关于configuration - 错误 : IIS7 managed requests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267409/

相关文章:

php - 如何从 Symfony2 中的包覆盖全局 Monolog 配置

iis-7 - 如何从 IIS7 网站导出/导入主机 header ?

sql-server - 重新启动我的 Sharepoint Server 2010 时出现了一大波未知错误?

asp.net - ASP.NET HttpModules 中的线程安全缓存

asp.net - 我可以从 HTTPModule 访问 session 状态吗?

Android:如何以编程方式创建 EAP wifi 配置?

java - 尝试创建 log4j2 rollingfileappender 时出错

c++ - 如何覆盖 GCC 的配置以进行包含搜索?

asp.net - session 状态超时与空闲超时

asp.net - 如何为Asp.Net中的所有子文件夹注册HttpHandler?