我有以下示例頁面結構:如何檢測是否從Server.Execute調用了aspx頁面?
- Webpage.aspx
- Script.aspx
如果我打電話Server.Execute("Script.aspx")
從Webpage.aspx,我怎麼能檢測Script.aspx它是從Webpage.aspx調用的,而不是直接來自Web瀏覽器?
我試過檢查Referrer,但這似乎只返回域而不是腳本。
我使用.NET 3.5
我有以下示例頁面結構:如何檢測是否從Server.Execute調用了aspx頁面?
如果我打電話Server.Execute("Script.aspx")
從Webpage.aspx,我怎麼能檢測Script.aspx它是從Webpage.aspx調用的,而不是直接來自Web瀏覽器?
我試過檢查Referrer,但這似乎只返回域而不是腳本。
我使用.NET 3.5
在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將始終產生當前執行的腳本,因此比較這兩個腳本將得到期望的結果。
希望這會有所幫助。
ASP.NET Web窗體至少可以告訴我們,如果該請求是通過Request.IsLocal地方。
您可以將querystring參數傳遞給Script.aspx(這將幫助您確定它是從WebPage.aspx調用的)。
Server.Execute("script.aspx?xFrom=webPage.aspx")
編輯:我想請求應該有它的一些價值你知道它正在運行webpage.aspx。
EDIT2:Request.Url?
由於Server.Execute使用與原始頁面相同的上下文運行新頁面,所以Request的所有屬性仍應該反映對Webpage.aspx的原始請求(除了CurrentExecutionFilePath,它希望包含「/Script.aspx」 )。 Request.Path應該包含「/Webpage.aspx」,而Request.Url將提供完整的Uri對象,如果您需要查看域或查詢字符串。
您也可以調用使用Server.Execute之前Script.aspx
+1中傳遞此信息以使用Context.Items - 這就是它的用途。 – Sam 2009-03-05 00:18:19
+1與Sam給出的相同原因。喜歡它! :-) – 2009-03-06 11:10:20
HttpRequest.FilePath
增加值Context.Items和閱讀它們將URL返回請求的頁面,然後你就可以做一個字符串匹配「 Script.aspx」。
(拿這個答案與鹽的巨大糧食雖然,我的.NET是非常不好的。)
假設您沒有任何IHttpHandler funniness,您可以檢查HttpContext.PreviousHandler是否爲空。然而,由於PreviousHandler可以設置一百萬(好幾個)原因,所以在調用Server.Execute之前,我會遵循stevemegson的建議使用HttpContext.Items。
只有當瀏覽器請求來自本地服務器時才返回true。在我的情況下,它總是返回false。 – GateKiller 2009-02-25 20:00:11
在這種情況下,我真的不認爲有任何引用回到原始頁面。您最好的選擇可能與其他人所說的一樣,要在查詢字符串 – baretta 2009-02-25 22:59:31