2

我们正在将一个 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 方法是否有效,如果有效,它的论点是什么?

4

1 回答 1

0

您知道吗,您可以使用 IIS 中的 web.config 文件和重定向规则轻松处理这个问题?

您需要激活此处描述的 URL Rewrite2 模块。这是 IIS 的一个非常好的特性,可以解决路由问题,请参见此处的一些示例。

看看你的情况,我会按照以下方式做一些事情:

<rule name="execute classic asp if file exists" stopProcessing="true">
  <match url="(\w+\.asp)$" />
  <conditions>
    <add input="C:\Path\To\Your\WebApp\{R:1}.asp" matchType="IsFile" />
  </conditions>
  <action type="Rewrite" url="{R:1}c" appendQueryString="true" />
</rule>
<rule name="execute dotnet otherwise" stopProcessing="true">
  <match url="(\w+\.asp)$" />
  <action type="Rewrite" url="{R:1}x" appendQueryString="true" />
</rule>

我不确定这里的所有正则表达式是否都适合你,但这意味着作为一个实验的开始。明确写的原因C:\Path\To\Your\WebApp\是,我没有找到一种方法来获取 Web 应用程序的基本路径作为参数。

于 2013-05-29T07:33:58.250 回答