2009-02-25 42 views
4

我有以下示例頁面結構:如何檢測是否從Server.Execute調用了aspx頁面?

  • Webpage.aspx
  • Script.aspx

如果我打電話Server.Execute("Script.aspx")從Webpage.aspx,我怎麼能檢測Script.aspx它是從Webpage.aspx調用的,而不是直接來自Web瀏覽器?

我試過檢查Referrer,但這似乎只返回域而不是腳本。

我使用.NET 3.5

回答

6

在Script.aspx.cs,你可以簡單地檢查Request的相比,目前的執行路徑。

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將始終產生當前執行的腳本,因此比較這兩個腳本將得到期望的結果。

希望這會有所幫助。

0

ASP.NET Web窗體至少可以告訴我們,如果該請求是通過Request.IsLocal地方。

+0

只有當瀏覽器請求來自本地服務器時才返回true。在我的情況下,它總是返回false。 – GateKiller 2009-02-25 20:00:11

+0

在這種情況下,我真的不認爲有任何引用回到原始頁面。您最好的選擇可能與其他人所說的一樣,要在查詢字符串 – baretta 2009-02-25 22:59:31

0

您可以將querystring參數傳遞給Script.aspx(這將幫助您確定它是從WebPage.aspx調用的)。

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

編輯:我想請求應該有它的一些價值你知道它正在運行webpage.aspx。

EDIT2:Request.Url?

12

由於Server.Execute使用與原始頁面相同的上下文運行新頁面,所以Request的所有屬性仍應該反映對Webpage.aspx的原始請求(除了CurrentExecutionFilePath,它希望包含「/Script.aspx」 )。 Request.Path應該包含「/Webpage.aspx」,而Request.Url將提供完整的Uri對象,如果您需要查看域或查詢字符串。

您也可以調用使用Server.Execute之前Script.aspx

+0

+1中傳遞此信息以使用Context.Items - 這就是它的用途。 – Sam 2009-03-05 00:18:19

+0

+1與Sam給出的相同原因。喜歡它! :-) – 2009-03-06 11:10:20

0

HttpRequest.FilePath增加值Context.Items和閱讀它們將URL返回請求的頁面,然後你就可以做一個字符串匹配「 Script.aspx」。

(拿這個答案與鹽的巨大糧食雖然,我的.NET是非常不好的。)

0

假設您沒有任何IHttpHandler funniness,您可以檢查HttpContext.PreviousHandler是否爲空。然而,由於PreviousHandler可以設置一百萬(好幾個)原因,所以在調用Server.Execute之前,我會遵循stevemegson的建議使用HttpContext.Items。

相關問題