我们正在将一个 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 Classic),并且在 IIS 中我指定了旧的 asp.dll 作为它们的处理程序。然后,我没有检查请求的 .asp 文件是否存在,如果存在则重新映射到 ASP Classic 处理程序,而是检查了对应物理位置中是否存在扩展名为 .aspc的文件。如果是这样,我会重写 URL 以附加“c”。这行得通!因此,上面我的第一个问题的答案是“是”,而我的第二个问题的答案是“是的,差不多,只是关于重新映射处理程序的部分是未知的”。但最好不必更改所有旧 .asp 文件的扩展名,所以我只剩下一个问题: 最初的 RemapHandler 方法是否有效,如果有效,它的论点是什么?