在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
指向的最后一个处理程序之前StaticFileModule
,DefaultDocumentModule
我DirectoryBrowsingModule
应该在目录请求上运行集成的 asp.net 处理程序。或者编写我自己的处理程序,将默认文档附加到任何目录请求。我很确定其中一个应该可以解决这个问题。但我该如何配置/开发它?
答案1
这不是一个错误 - 这是托管处理程序先决条件的工作方式。它使得模块只能由为其定义了托管处理程序的页面处理。
您可以取消先决条件,然后它将解析所有内容 - 但您会失去不解析静态内容所带来的性能提升。
最好的选择可能是将所有静态内容放在单独的目录中,然后使用 web.config 删除该模块。
答案2
这是实际的解决方案,解决了这个托管请求错误
Stackoverflow.com 上的答案