2014-03-26 97 views
0

如何獲得aspx頁面的HttpHandler?如何獲得aspx頁面的HttpHandler?

舉例來說,我有Test.aspx的背後public class Test : System.Web.UI.Page [...]
代碼如果我打電話new Test()它不返回準確同類的HttpHandler的是,一個我從HttpApplication.Context.Handler得到它可以訪問在瀏覽時test.aspx

FYI(和definitivelly不是問題):我需要的,因爲我會做使用Server.Transfer(NewPageHandler)

回答

1

你可以讓你的網頁

System.Web.UI.PageParser 
.GetCompiledPageInstance("~/YourPage.aspx", 
         HttpApplication.Server.MapPath("~/YourPage.aspx") 
         , HttpApplication.Context); 
+0

@Serge的編制情況,能否請你解釋一下了。不清楚你 –

+0

偉大的作品。我更喜歡你的解決方案,而不是Luaan的解決方案,因爲你不需要知道除url之外的任何內容(這使得你的解決方案更適合廣泛使用)。 – Serge

+0

@系列,歡迎您:) –

1

基本上覆雜的東西,你的情況Test是實際Test.aspx類的父(即ASPX文件。被編譯成繼承自Test的類)。

要獲得Test.aspx例如,一種選擇是使用直接編譯:

BuildManager.CreateInstanceFromVirtualPath("~/Test.aspx", typeof(Test)); 

或者你可以使用PageParser.GetCompiledPageInstance作爲穆拉利MURUGESAN建議,他們幾乎等同。

請注意,這不是真的支持(「此API支持.NET Framework基礎結構,不能直接在您的代碼中使用」),但它確實起作用。其實我已經切換到默認PageHandlerFactory在我的代碼,這是很多更穩定:

class LuPageHandlerFactory : PageHandlerFactory 
{ 
    public static LuPageHandlerFactory Instance = new LuPageHandlerFactory(); 
    private LuPageHandlerFactory() { } 
} 

// Which lets me call this: 
var handler = 
    LuPageHandlerFactory.Instance.GetHandler 
    (
     HttpContext.Current, null, "~/Test.aspx", null 
    ) as Test; 

一個更簡潔的方法就是使用HttpContext.Current.RewritePath("~/Test.aspx");HttpContext.Current.Items傳遞數據。

我的引擎實際上使用我提到的最後一種方法作爲回退 - 如果LuPageHandlerFactory方法拋出SecurityException,我回退到RewritePath。 您還應該處理HttpCompileException