【发布时间】:2013-01-22 08:34:26
【问题描述】:
我们正在将 ASP Classic 网站(实际上是更大网站下的虚拟目录)升级到 ASP.NET 3.5。将有一些遗留目录仍然是 ASP Classic。除此之外,每个 .asp 文件都将替换为目录层次结构中相同位置的 .aspx 文件。我们不想破坏从其他地方进入网站的旧链接。该网站托管在 IIS 6 上(我们无法控制)。
我的想法是,在 IIS 中,将 .asp 文件的常用处理程序 asp.dll 替换为 aspnet_isapi.dll。 第一个问题:如果我这样做,对 .asp 文件的请求是否会通过我在 web.config 中创建和注册的任何自定义 HTTP 模块进行路由?
然后我将创建一个连接到 BeginRequest 的 HTTP 模块,该模块将测试请求的路径(在任何查询字符串之前)是否以 .asp 结尾。如果是,它将检查物理文件是否存在。如果没有,那么我将使用 HttpContext.RewritePath 将“x”附加到“.asp”。否则,如果 .asp 文件确实存在,我将使用 HttpContext.RemapHandler 将处理程序切换回 asp.dll,以便将文件作为 ASP Classic 文件处理。
第二个问题:这行得通吗? 第三个问题:我使用什么作为 RemapHandler 方法的参数?如何获取对 ASP Classic 处理程序实例的引用? (如果我知道第三个问题的答案,我会自己尝试所有这些!)
更新:好的,我自己也试过了,只是我重命名了剩余的 .asp 文件,使它们的扩展名是 .aspc(ASP 经典),并且在 IIS 中我分配了旧的 asp .dll 作为他们的处理程序。然后,我没有检查请求的 .asp 文件是否存在,如果存在则重新映射到 ASP Classic 处理程序,而是检查了相应物理位置中的文件是否存在除了扩展名为 .aspc。如果是这样,我会重写 URL 以附加“c”。这行得通!因此,上面我的第一个问题的答案是“是”,而我的第二个问题的答案是“是的,差不多,只是关于重新映射处理程序的部分是未知的”。但是最好不必更改所有旧 .asp 文件的扩展名,所以我只剩下一个问题:原始的 RemapHandler 方法是否有效,如果有效,它的论点是什么?
【问题讨论】:
-
用于 404 错误的自定义错误页面不起作用吗?否则,您是否查看过之前的 SO 帖子:stackoverflow.com/questions/1572746/…
-
感谢您提供指向先前讨论的指针。我以前没有遇到过。我将建议的 BuildProvider 和 httpHandler 代码添加到 web.config。它现在正在尝试解析页面,但是在带有 VBScript 注释的每一行(单引号右侧的所有内容)它都给了我“常量换行符”和“字符文字中的字符太多”,就好像它现在一样认为单引号应该是字符串分隔符而不是注释标记。
-
我将 添加到我的一个 .asp 文件的顶部并再次请求它。这摆脱了以前的错误,但现在它也开始表现得好像我添加了 Option Explicit ,即使我没有添加。它开始用“预期声明”标记赋值语句。然后我声明了前几个变量,之后它接受了它们,然后在 Set 语句上出错:“BC30807:不再支持'Let'和'Set'赋值语句。”有什么想法吗?
-
哦,它还将我的 Dim 语句标记为“BC42020:没有‘As’子句的变量声明;假定的对象类型。”由于这是 VBScript,一种无类型语言,我真的很好奇发生了什么。
-
顺便说一句,我不知道这是否有什么不同,但到目前为止,所有这些被标记的假定错误都在主页中包含的#include 文件中。跨度>
标签: asp.net asp-classic httphandler httpmodule