1

我正在尝试使用 IIS7 中的自定义 HttpHandler 来处理“.aspx”和非扩展页面请求(即contact.aspx 和/contact/)。我的处理程序在任何一种情况下都可以正常工作,但是一旦我尝试处理这两种情况,它只适用于一种情况。请参阅下面我的 web.config 中的处理程序片段:

如果我只映射到“* .aspx”,那么所有 .aspx 请求都会得到正确处理,但显然无扩展请求将不起作用:

<add name="AllPages.ASPX" path="*.aspx" verb="*" type="Test.PageHandlerFactory, Test" preCondition="" />

如果我将映射更改为“*”,则所有无扩展请求都将正确处理,但仍应由该处理程序处理的“.aspx”请求停止工作。请注意,我添加了 StaticFiles 条目以处理磁盘上的文件,如图像、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 not found 错误。该错误还表明该请求由 StaticFiles 处理程序处理。但我确保将 resourceType="File" 添加到 StaticFileHandler 以避免这种情况。根据 MS 的说法,这意味着该请求仅适用于“磁盘上的物理文件”。我是否误读/解释了“磁盘上”部分?

我的 .aspx 文件不在磁盘上,这就是我想首先使用处理程序的原因。

4

1 回答 1

2

第二个配置将导致 *.aspx 被处理,StaticFileHandler因为文件确实存在,因此它们符合处理程序的标准。但是,处理程序配置为不提供这些文件,而是生成 404 消息。

更好的解决方案是使用 HttpModule 实现(例如URL Rewrite Module)来重写页面或处理程序的虚拟路径。

于 2010-03-23T21:42:06.093 回答