BUG:IIS7 管理请求

BUG:IIS7 管理请求

在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,我看不出有什么区别。对我来说这外观、行走和声音像一只虫子。这是一个错误!为什么?因为当我请求第一个时,它是一个托管请求,不是吗?当然是。但 IIS7 将其视为静态请求。那么?这是一个错误。此请求应被视为已管理。

我如何说服 IIS7 对不包含文件名的 URL 请求运行托管处理程序?

帮助思考

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

答案1

这不是一个错误 - 这是托管处理程序先决条件的工作方式。它使得模块只能由为其定义了托管处理程序的页面处理。

您可以取消先决条件,然后它将解析所有内容 - 但您会失去不解析静态内容所带来的性能提升。

最好的选择可能是将所有静态内容放在单独的目录中,然后使用 web.config 删除该模块。

答案2

这是实际的解决方案,解决了这个托管请求错误
Stackoverflow.com 上的答案

相关内容