.net 如何检测是否从Server.Execute调用了aspx页?
我有以下示例页面结构:.net 如何检测是否从Server.Execute调用了aspx页?,.net,asp.net,.net-3.5,.net,Asp.net,.net 3.5,我有以下示例页面结构: Webpage.aspx Script.aspx 如果我从Webpage.aspx调用Server.Execute(“Script.aspx”),我如何在Script.aspx中检测到它是从Webpage.aspx调用的,而不是直接从web浏览器调用的 我试着检查推荐人,但这似乎只是返回域,而不是脚本 我正在使用.NET 3.5上的ASP.NET Web表单,至少您可以通过request.IsLocal知道请求是否是本地的。您可以将querystring参数传递给Sc
- Webpage.aspx
- Script.aspx
Server.Execute(“Script.aspx”)
,我如何在Script.aspx中检测到它是从Webpage.aspx调用的,而不是直接从web浏览器调用的
我试着检查推荐人,但这似乎只是返回域,而不是脚本
我正在使用.NET 3.5上的ASP.NET Web表单,至少您可以通过request.IsLocal知道请求是否是本地的。您可以将querystring参数传递给Script.aspx(这将帮助您确定它是从WebPage.aspx调用的)
Server.Execute(“script.aspx?xFrom=webPage.aspx”)
编辑:我认为请求应该有一些价值,让您知道它正在运行webpage.aspx
EDIT2:Request.Url?由于Server.Execute使用与原始页面相同的上下文运行新页面,因此请求的所有属性仍应将原始请求反映到Webpage.aspx(CurrentExecutionFilePath除外,它希望包含“/Script.aspx”)。Request.Path应包含“/Webpage.aspx”,而Request.Url将提供完整的Uri对象,如果您需要查看域或查询字符串
您还可以在调用Server.exe之前向Context.Items添加值,并在Script中执行和读取它们。aspx
HttpRequest.FilePath
将返回请求页面的URL,然后您可以对“Script.aspx”进行子字符串匹配
(尽管我的.Net非常差,但对这个答案还是持保留态度。)在Script.aspx.cs中,您只需将Request.Path与当前执行路径进行比较即可
if ( Request.CurrentExecutionFilePath == Request.Path )
{
//This has been called from a web browser
} else {
//This has been executed from the file Request.Path
}
为什么?
当您调用Server.Execute时,请求的一部分将原封不动地传递。因此,如果在使用服务器后查看Script.aspx.cs中的Request.Path的值。在Webpage.aspx.cs中执行,您将看到它的值为“/Webpage.aspx”
但是,如果web浏览器要直接访问Script.aspx,则Script.aspx.cs中Request.Path的值将导致“/Script.aspx”。currentExecutionPath将始终生成当前执行的脚本,因此比较这两个脚本将得到所需的结果
希望这能有所帮助。假设您没有任何IHttpHandler功能,您可以检查是否为非空。但是,由于可以设置PreviousHandler的原因有一百万个(好吧,有几个),因此我同意stevemegson的建议,即在调用Server.Execute之前使用HttpContext.Items。只有当浏览器请求来自本地服务器时,才会返回true。在我的情况下,它总是返回false。在这种情况下,我真的不认为有任何引用返回到原始页面。你最好的选择可能是像其他人所说的那样,在QueryString中传递此信息,它确实返回“Script.aspx”,但我希望它返回“Webpage.aspx”。谢谢你的回答。等一下。。。请改用CGI“SCRIPT\u NAME”变量。我现在还没有一个ASP框来测试它,但希望它能像PHP一样工作(在这种情况下,PHP做的事情是正确的)。谢谢。这是建议的最佳方法,因为我不必在script.aspx:)之外做任何额外的工作