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:但它不是这样做的。它正在传输,但文件名相同。您是否尝试过在调试器中调试此代码?您应该能够在代码的开头放置一个断点,并按照代码的逻辑和路径查看每个变量包含的内容。也许您的一种扩展方法没有做到您认为的那样。