在HttpModule中使用Server.Transfer,Url不会更改

时间:2014-06-18 17:05:10

标签: asp-classic server.transfer

我有一个HttpModule来清除BeginRequest中网址中的连字符,这样我就可以拥有一个名为MyFile.asp的脚本文件,但是可以调用它像/my-file.asp这样的端点。 (是的,它的经典ASP,还没有迁移到.NET。)

代码如下所示:

'if not an asp file, skip it
If Not Request.Path.EndsWith(".asp") Then Return

'if the physical file exists, bail out, to let that file service the request
If ("~" & Request.RawUrl).ToServerFileObject.Exists Then Return

'if a dehyphenated version of the file exists
If ("~" & Request.RawUrl.RemoveHyphens).ToServerFileObject.Exists Then
    'transfer to that file
    application.Server.TransferRequest("~" & Request.RawUrl.RemoveHyphens, True)
    Return
End If

当我运行此请求myfile.asp时,代码会看到该文件存在于磁盘上,返回,并且IIS使用它来为请求提供服务。当我请求my-file.asp时,我希望它会看到该文件不存在,然后看到磁盘上存在myfile.asp并转移到它。

但相反的是,此处理程序不断被反复调用,每次Request.RawUrl设置为my-file.asp。这就像转移有效,但没有更新请求,这对我没有任何意义。

1 个答案:

答案 0 :(得分:0)

看起来Request.RawUrl始终保留最初请求的值,即使在转移后也是如此,但还有其他属性,例如Request.AppRelativeCurrentExecutionFilePathRequest.FilePath确实显示了该网址被转移到,所以我转而使用其中一个,我可以做我现在需要的。感谢所有参与建议的人。