2009-09-10 42 views
0

給定從System.Web.Page(即常規頁面實例)派生的類的實例如何獲取相對URL需要請求該頁面(沒有Request對象)。如何從頁面對象本身的實例獲取頁面的相對URL

爲了澄清,我實例化了常規頁面請求管道之外的頁派生類。

例如

var p = new MyPage(); 
// p.Request is not going to be valid 

從那我該如何獲得通常用於請求頁面的相應URL?

回答

2

簡短的答案 - 你不能,因爲你來了它倒退。沒有請求看,「請求路徑」沒有意義。

頁面對象不知道會導致它被調用的路徑。實際上,它只是一個實現IHttpHandler來生成輸出的.net類。

當一個.aspx頁面的請求進來時,IIS把它交給了asp.net pipleline。 asp.net引擎根據路徑確定正確的處理程序。在這種情況下,它是System.Web.UI.PageHandlerFactory。這個類使用請求路徑來找出正確的Page對象來實例化。它通過查看請求路徑並使用它將.aspx編譯爲.net代碼然後實例化編譯結果類。

此外,對於您的情況,PageHandlerFactory(實際上是支持類BuildManager )允許您只在一個方向上找到所需的信息 - 編譯後的類的虛擬路徑。這是有道理的,因爲多條路徑可以(理論上)映射到單個頁面。

查看關於asp.net request pipeline的任何文章以獲取更多信息,或查看System.Web中的PageHandlerFactory或BuildManager類。

+0

感謝菲利普 - 我曾認爲這可能是這種情況,但想知道是否有我缺少的解決方案。將不得不解決它!乾杯。 – 2009-09-10 13:46:27

0

System.Web.Page有一個Request對派生類可見的屬性。

+0

我知道,但如果我直接實例化頁面對象,那麼就不會有請求對象關聯它。 – 2009-09-10 13:11:03

+0

也許我不明白這個問題。你如何訪問HttpRequest上下文之外的頁面對象? – 2009-09-10 13:12:35

+0

我是,現在更新問題更加清晰。 – 2009-09-10 13:14:58

0

嘗試Request.VirtualPath

相關問題