2009-04-02 11 views
9

HttpHandlerを登録して、ネストされている距離に関係なく、ルートフォルダのすべてのサブフォルダを含める必要があります。私は以下のコードでその動作を期待していましたが、実際にはルートフォルダに直接項目が含まれています。Asp.NetのすべてのサブフォルダにHttpHandlerを登録するには?

<httpHandlers> 
    <add verb="*" path="root/*" type="HandlerType, Assembly" /> 
</httpHandlers> 

私はもちろん、しかし、ちょうどルートの下に何かを言うための方法に遭遇し、まだ持っている、第二層であるものを含めて、以下のように登録することができます。

<httpHandlers> 
    <add verb="*" path="root/*/*" type="HandlerType, Assembly" /> 
</httpHandlers> 

これはかなりの間、私を悩ませている帽子です。私は簡単な解決策を聞いてみたいです。

「ルート」とは、アプリケーションのルートを意味するものではなく、アプリケーション内のすべてのリクエストを処理対象のモジュールに送信することに必ずしも関心がないということを明確にしたいと思います。

答えて

0

多分HttpHandlerの代わりにHttpModuleを使うべきです。

+0

これはもちろん選択肢ですが、特定のフォルダの下にあるすべての要求に対して、アプリケーションのすべての要求に対してハンドラは必要ありません。私は私の質問ではっきりしていないかもしれませんが、 "root"というのは、フォルダツリーのそのブランチのサイトのルートを意味するものではありません。 – YonahW

6

あなたはあなたが別のweb.configファイルを必要としない=「*」

+1

私の場合はフォルダにマッチしないURLを扱っていますが、これは素晴らしいアイデアです。 – YonahW

19

パスで、この「ルート」フォルダにあるweb.configファイルを作成することができます。プライマリweb.configファイル内<場所>要素を使用します。

<!-- Configuration for the "root" subdirectory. --> 
<location path="root"> 
    <system.web> 
    <httpHandlers> 
     <add verb="*" path="root" type="HandlerType, Assembly"/> 
    </httpHandlers> 
    </system.web> 
</location> 
+0

これはかなりクールです。共有のおかげで、この要素については決して知りませんでした。 – YonahW

+0

それはトリックでした!どうもありがとう! – Allov

+0

これはまったく受け入れられる答えです! – ssougnez

0

あなたはすべての着信要求のURLをチェックします。http モジュールを作成することができます。

  • のすぐ下にいくつかのダミーの値にContext.Itemsに
  • 変更要求パスをフル、元のURLを入れて:要求URLを任意のフォルダにある場合は、あなたのハンドラを処理したい、これはありませんハンドラの設定に一致するハンドラのフォルダ。

ハンドラが呼び出され、リクエスト内にダミーのURLが見つかります。 これはこのURLを無視し、Context.Itemsにある実際のURLを処理します。

関連する問題