我有一个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
。这就像转移有效,但没有更新请求,这对我没有任何意义。
答案 0 :(得分:0)
看起来Request.RawUrl
始终保留最初请求的值,即使在转移后也是如此,但还有其他属性,例如Request.AppRelativeCurrentExecutionFilePath
或Request.FilePath
确实显示了该网址被转移到到,所以我转而使用其中一个,我可以做我现在需要的。感谢所有参与建议的人。