2009-08-29 7 views

答えて

4

のパスプロパティを使用できますか?

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にマップできるフレームワーク標準サービスロケータがあれば、非常にうれしいでしょう。私が言うと思う価値のあるもの! –

+1

一般に、ユーザーコードは、そのレベルでアプリケーションの構成の内部を調べる必要があることは珍しいことです。さらに、組み込みのハンドラと、マシンレベルの設定で登録されたハンドラがあります。次に、必要に応じてハンドラを動的に登録するHttpHandlerFactoriesがあります。ハンドラの動的な性質と潜在的なセキュリティの考慮事項の間で、私はこれらのオブジェクトに直接アクセスする方法があまりないことがわかります。 –

+1

同じ頭痛をした人のために、 "system.web/httpHandlers"は大文字と小文字を区別して覚えています。つまり、Handlersの "H"は議院です。 –

0

現在のHTTPコンテキストから私が正しく質問を理解していれば、あなたは右のweb.configファイルからのパスを取得したいRequestオブジェクト

0

あなたは現在のリクエストを処理するハンドラへのパスに興味があるなら:あなたはどこ他のハンドラインスタンスのコレクションを見つけるために知っておく起こった場合

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

、あなたが同じアプローチを使用することができます彼らの道も手に入れてください。

+0

私は実際には、DLL自体の場所ではなく、ハンドラの「仮想パス」を解決しようとしています。私。 "MyHandler"タイプが "MyHandler.axd"に登録されている場合、 "MyHandler.axd"を解決したいと思います。 –

関連する問題