Asp classic Url不';无法在HttpModule内使用Server.Transfer进行更改

Asp classic Url不';无法在HttpModule内使用Server.Transfer进行更改,asp-classic,server.transfer,Asp Classic,Server.transfer,我有一个HttpModule,它可以清除BeginRequest中URL中的连字符,这样我就可以有一个名为MyFile.asp的脚本文件,但可以使用类似/MyFile.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 l

我有一个
HttpModule
,它可以清除
BeginRequest
中URL中的连字符,这样我就可以有一个名为
MyFile.asp
的脚本文件,但可以使用类似
/MyFile.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使用该文件为请求提供服务。当我请求
myfile.asp
时,我希望它会看到该文件不存在,然后看到磁盘上确实存在
myfile.asp
,并将其传输到该文件


但实际上,这个处理程序只是不断地被调用,每次,
Request.RawUrl
都被设置为
my file.asp
。好像传输正在工作,但没有更新请求,这对我来说没有任何意义。

看起来像是
请求。即使在传输之后,RawUrl
始终保留最初请求的值,但还有其他属性,例如
Request.AppRelativeCurrentExecutionFilePath
Request.FilePath
,它们确实显示了传输到的url,因此我切换到使用其中一个,现在我可以做我需要的事情了。感谢所有提出建议的人。

server.transfer不会更改url,但会获取文件并将其返回到相同url下的浏览器。您需要执行Response.Redirect。然而,由于这是经典的asp,我不确定这里的细节;它说的是“停止处理这个,处理新的URL”,但客户端不知道发生了什么,仍然看到原始请求的URL。@亚当:我希望它这样做,但我希望它返回一个与请求的不同的文件。我不想
重定向
,因为我希望它对用户不可见。@Cory:但它不是这样做的。它正在传输,但文件名相同。您是否尝试过在调试器中调试此代码?您应该能够在代码的开头放置一个断点,并按照代码的逻辑和路径查看每个变量包含的内容。也许您的一种扩展方法没有做到您认为的那样。