2009-08-29 39 views

回答

4

的path屬性如果我理解正確的問題,你希望獲取從web.config中正確的路徑?

如果是這樣,什麼你可能尋找的是這樣的:

string p = null; 
System.Web.Configuration.HttpHandlersSection httpHandlersSection = 
    (System.Web.Configuration.HttpHandlersSection) 
     System.Configuration.ConfigurationManager.GetSection("system.web/httpHandlers"); 

foreach (System.Web.Configuration.HttpHandlerAction handler in httpHandlersSection.Handlers) 
{ 
    if(handler.Type == "myType") 
    { 
     p = handler.Path; 
     break; 
    } 
} 

訣竅這裏的if語句。 web.config中的處理程序沒有可用作密鑰的友好「名稱」。他們所有的都是類型(可以是醜陋的字符串),路徑和動詞。要找到您感興趣的特定處理程序,您可能必須在處理程序的類型或路徑中搜索已知的子字符串,以識別您感興趣找到的特定處理程序。

+0

這是一個相當不錯的解決方案,雖然間接(由.NET標準)。如果有某種框架標準服務定位器可以映射到HttpHandler以便從單獨的模塊輕鬆連接,那將會非常好。值得考慮的事情我會說! – 2009-10-07 06:42:32

+1

一般來說,用戶代碼有必要檢查該級別的應用程序配置的內部情況。另外還有內置的處理程序和其他通過機器級配置註冊的處理程序。然後有HttpHandlerFactories按需動態註冊處理程序。在處理程序的動態性質和潛在的安全性考慮之間,我可以看出爲什麼直接訪問這些對象的方式並不多。 – 2009-10-07 16:26:42

+1

對於那些和我一樣頭痛的人,請記住,「system.web/httpHandlers」區分大小寫。這意味着Handlers中的「H」是國會大廈。 – 2010-08-03 02:01:53

0

從當前的HTTP上下文中使用Request對象

0

如果你有興趣的路徑處理程序處理當前請求:

string path = HttpContext.Current.Handler.GetType().Assembly.CodeBase; 

如果你碰巧知道在哪裏可以找到其它的處理器實例的集合,你可以用同樣的方法來也得到他們的路徑。

+0

我實際上試圖解決處理程序的「虛擬路徑」,而不是DLL本身的位置。即如果「MyHandler」類型在「MyHandler.axd」註冊,我想解析「MyHandler.axd」。 – 2009-10-13 16:24:28