我正在尝试使用IIS7中的自定义HttpHandler处理“.aspx”和非扩展页面请求(即contact.aspx和/ contact /)。我的处理程序在一种情况下都可以正常工作,但是一旦我尝试处理这两种情况,它只适用于一种情况。请参阅下面的web.config中的Handlers代码段:
如果我只保留映射到“* .aspx”,那么所有.aspx请求都会被正确处理,但显然无扩展请求将无效:
<add name="AllPages.ASPX" path="*.aspx" verb="*" type="Test.PageHandlerFactory, Test" preCondition="" />
如果我将映射更改为“*”,则会正确处理所有无扩展请求,但此处理程序仍应处理的“.aspx”请求将停止工作。请注意,我添加了StaticFiles条目,以便处理磁盘上的文件,如images,css,js等。
<add name="WebResource" path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" />
<add name="StaticFiles" verb="GET,HEAD" path="*.*" type="System.Web.StaticFileHandler" resourceType="File" />
<add name="AllPages" path="*" verb="*" type="Test.PageHandlerFactory, Test" preCondition="" />
疯狂的是,当我加载“.aspx”请求时(显示第二个配置),IIS7给出了404未找到的错误。该错误还表示请求由StaticFiles处理程序处理。但我确保将resourceType =“File”添加到StaticFileHandler以避免这种情况。根据MS,这意味着该请求仅适用于“磁盘上的物理文件”。我误读/解释“磁盘上”部分吗?
我的.aspx文件不在磁盘上,这就是为什么我想首先使用处理程序。
答案 0 :(得分:2)
第二个配置将导致* .aspx由StaticFileHandler
处理,因为文件确实存在,因此它们符合处理程序的条件。但是,处理程序配置为不提供这些文件并生成404消息。
更好的解决方案是使用HttpModule实现(例如URL Rewrite Module)来重写页面或处理程序的虚拟路径。