Rob*_*nik 5 configuration iis-7 httpmodule
(我不知道是否也应该将此问题发布到ServerFault,因为它是关于IIS配置的?)
在IIS7中,我们可以告诉模块运行托管内容(从而加快静态内容服务):
<modules>
...
<add name="WhateverName"
type="WhateverType"
preCondition="managedHandler"
...
</modules>
Run Code Online (Sandbox Code Playgroud)
但.只要在请求的URL中还有文件名(带扩展名),这样就可以正常工作.如果省略它,IIS7会认为你想要静态内容,托管模块将无法运行.
http://localhost/ <-- this one will skip managed handlers
http://localhost/default.aspx <-- this one will run them
Run Code Online (Sandbox Code Playgroud)
如果我手动设置IIS7默认文件,那么第一个是default.aspx,我可以看到没有区别,没有区别.对我来说,这看起来像是一个臭虫,走路和听起来像是 这是一个错误!为什么?因为当我请求第一个时,它是一个托管请求,不是吗.当然如此.但IIS7将其视为静态请求.所以?这是一个错误.此请求应视为托管.
如何说服IIS7为没有文件名的URL请求运行托管处理程序?
让我帮你思考一下:如果我重新订购system.webServer/handlers,我肯定可以解决这个问题.最后才StaticFile指向处理器StaticFileModule,DefaultDocumentModule并且DirectoryBrowsingModule我要上运行的目录请求集成asp.net处理程序.或者编写我自己的处理程序,将默认文档附加到任何目录请求.我很确定其中一个应该解决它.但是我如何配置/开发它呢?
问题出在请求处理顺序中.IIS7按照IIS的Handlers配置元素指定的顺序处理请求.默认情况下,IIS配置的Handlers元素包含
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
Run Code Online (Sandbox Code Playgroud)
在处理程序的最后.因此,所有与先前指定的处理程序不匹配的请求都将由此处理程序处理(包括文件夹请求).
您可以使用处理程序配置中的clear元素删除所有默认处理程序,并指定您自己的请求处理顺序.
我建议将默认的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" />
Run Code Online (Sandbox Code Playgroud)
和manged处理程序(PageHandlerFactory)之后的文件夹请求.
<add name="PageHandlerFactory-Folders" path="*" verb="*" type="System.Web.UI.PageHandlerFactory" modules="ManagedPipelineHandler" resourceType="Unspecified" requireAccess="Read" allowPathInfo="false" preCondition="integratedMode" />
Run Code Online (Sandbox Code Playgroud)
最后,您还应该添加StaticFile处理程序.
这是一个例子.