Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何检测是否从Server.Execute调用了aspx页?_.net_Asp.net_.net 3.5 - Fatal编程技术网

.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
如果我从Webpage.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:)之外做任何额外的工作