在 IIS7 中使用自定义 HttpHandler 处理 .aspx 和非扩展页面的请求时出现问题

发布于 2024-08-15 17:25:20 字数 1066 浏览 9 评论 0原文

我正在尝试使用 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未发现错误。该错误还表明该请求由 StaticFiles 处理程序处理。但我确保将 resourceType="File" 添加到 StaticFileHandler 以避免这种情况。根据 MS 的说法,这意味着该请求仅针对“磁盘上的物理文件”。我是否误读/解释了“在磁盘上”部分?

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

I am trying to process both ".aspx" and non-extension page requests (i.e. both contact.aspx and /contact/) using a custom HttpHandler in IIS7. My handler works just fine in either one case or the other, but as soon as I try to process both cases, it only works for one. Please see Handlers snippet from my web.config below:

If i keep only mapping to "*.aspx" then all .aspx requests are processed correctly, but obviously extensionless requests won't work:

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

If i change the mapping to "*" then all extensionless requests are processed correctly, but ".aspx" requests that should still be handled by this handler stop working. Note that i added the StaticFiles entry in order to process files that are on disk like images, css, js, etc.

<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="" />

The crazy thing is that when i load an ".aspx" request (with the 2nd configuration shown) IIS7 gives a 404 not found error. The error also says that the request is processed by the StaticFiles handler. But I made sure to add resourceType="File" to the StaticFileHandler in order to avoid this. According to MS this means the request is only for "physical files on disk". Am i misreading/interpreting the "on disk" part?

My .aspx file isn't on disk, that's why i want to use the handler in the first place.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

追我者格杀勿论 2024-08-22 17:25:20

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

更好的解决方案是使用 HttpModule 实现,例如 URL重写模块重写页面或处理程序的虚拟路径。

The 2nd configuration will cause *.aspx get handled by StaticFileHandler because the files do exist so they meet the criteria for the handler. However, the handler is configured not to serve these files and produces a 404 message instead.

A better solution would be to use an HttpModule implementation such as URL Rewrite Module to rewrite virtual paths to pages or handlers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文