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