如何检测是否从Server.Execute调用了aspx页面?

时间:2009-02-25 19:45:06

标签: .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 Forms

6 个答案:

答案 0 :(得分:12)

由于Server.Execute运行与原始页面具有相同上下文的新页面,因此Request的所有属性仍应反映对Webpage.aspx的原始请求(CurrentExecutionFilePath除外,它希望包含“/Script.aspx”) 。 Request.Path应包含“/Webpage.aspx”,而Request.Url将在需要查看域或查询字符串时提供完整的Uri对象。

您还可以在调用Server.Execute之前向Context.Items添加值,并在Script.aspx中读取它们

答案 1 :(得分:6)

在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时,请求的部分传递不受影响。因此,如果您在使用Webpage.aspx.cs中的Server.Execute后从Script.aspx.cs查看Request.Path的值,您将看到它的值为“/Webpage.aspx”。

但是,如果Web浏览器直接访问Script.aspx,则Script.aspx.cs中的Request.Path值将导致“/Script.aspx”。 currentExecutionPath将始终生成当前执行的脚本,因此比较这两个脚本将得到所需的结果。

希望这有帮助。

答案 2 :(得分:0)

至少你可以通过Request.IsLocal判断请求是否是本地请求。

答案 3 :(得分:0)

您可以将一个查询字符串参数传递给Script.aspx(这将帮助您识别它是从WebPage.aspx调用的)。

Server.Execute("script.aspx?xFrom=webPage.aspx")

编辑:我认为请求中应该有一些值,以便您知道它正在运行webpage.aspx。

EDIT2:Request.Url?

答案 4 :(得分:0)

HttpRequest.FilePath会将URL返回到请求的页面,然后您可以为“Script.aspx”执行子字符串匹配。

(尽管我的.Net非常糟糕,但这个答案还是很大。)

答案 5 :(得分:0)

假设您没有任何IHttpHandler功能,您可以检查HttpContext.PreviousHandler是否为空。但是,由于可以设置PreviousHandler有一百万(好的,几个)原因,我会在调用Server.Execute之前使用stevemegson建议使用HttpContext.Items。