2010-12-01 16 views
6

私のアプリケーション "http://example.com/whateverpath"へのリクエストをカスタムHttpHandlerで処理したいが、 "whateverpath"の値に応じて戻り値を返す。asp.netカスタムHttpHandlerとURLルーティング

"http://example.com/path1"にアクセスするユーザーは、 "http://example.com/path2"にアクセスするユーザーとは異なる応答を得ますが、両方の要求を同じHttpHandlerで処理する必要があります。アイデアは、データベース内の「whateverpath」を検索し、結果に応じてレスポンスの内容を返します。

私はURLルーティングについて聞きましたが、すでにカスタムHTTPハンドラが動作していますが、両方の手法を組み合わせて必要なものを手に入れることはできますか?

私はこの問題を尊重します。

乾杯 フランクアベル

答えて

4

ですから、IHttpHandlerと呼ばれる実装したクラスがあります。これは、すべてのURLをリダイレクトしているので

<httpHandlers> 
    <add verb="*" path="*" type="Example.MyHandler"/> 
</httpHandlers> 

MyHandlerをし、それが名前空間Exampleでだ、あなたはサイトのWeb.ConfighttpHandlersセクションの中に以下のエントリを作成する必要がありあなたのWebサイト/アプリケーションのハンドラには、静的コンテンツ(imgs、スクリプト、スタイルシートなど)を提供する方法を考慮する必要があります。

<httpHandlers> 
    <add verb="*" path="*" type="Example.MyHandler"/> 
    <add verb="GET,HEAD" path="static/*" type="System.Web.StaticFileHandler" /> 
</httpHandlers> 

を(Visual Studioの中に埋め込まれた)、ローカルのdevのウェブサーバの場合、これはすべてのことが必要なのである:一つの方法は、あなたが、その後のようなあなたのハンドラを設定することができ、http://example.com/static/...のような一貫性のあるURLに静的なコンテンツを格納することです。 IISでは、これらのURLを処理する方法についてIISに指示する必要があります(サーバーが最初に送信する場所を決定するために、ASP.NETに送信するかどうかなど)。

  • オープン:IISマネージャ - >
  • 章:ウェブサイト - >
  • は右あなたのウェブサイトをクリックしてください - >
  • オプション:[プロパティ - >
  • タブ:ホームDirectoy - >
  • ボタン:[設定...] - >
  • タブ:マッピング - >
  • セクション:「ワイルドカードアプリケーションマップ(実装順序) : " - >
  • ボタン:[挿入...] - >
  • 実行可能ファイル: "C:\ WINDOWS \ Microsoft.NET \ Frameworkの\ v2.0.50727ののの\ ASPNET_ISAPI.DLL"(またはあなたのハンドラが使用する.NETランタイムのいずれかのバージョン) - >
  • のチェックを外し「があることを確認します。 [OK]

は今IISとASP.NETの両方があなたのURLに対処する方法を知っている:>

  • ボタン - ファイルが」存在しています。

    上記のアプローチは、静的ファイルを要求するときに、ASP.NETがIISではなく実際にファイルを提供していることを意味します。これは、いくつかの短所(here)につながります。ディレクトリをアプリケーション(IISマネージャー)に切り替え、ワイルドカードマッピングステートメント(上に追加)を削除し、アプリケーションから戻すことで、この動作を無効にすることができます(ワイルドカードマッピングを静的ディレクトリから無効にする)。 Voilà - 静的ファイルはIISに処理され、ASP.NETを嫌うことはありません。

  • 0

    私は、URLルーティングとHTTPハンドラを組み合わせることはお勧めしません。

    これはURLルーティングにとって完璧な仕事のようです。ただし、HTTPハンドラは使用しません。

    「〜/ CustomData/whateverpath」をASPXページにマップするだけです。次に、ページにデータベースからデータをロードさせます。後で、 "whateverpath"が何であっても、データを検索するロジックが同じであれば、すべてのバリエーションに対してロジックを繰り返す必要はありません。代わりに、すべてのケースで正しいデータをロードする単一のファイルにマップする必要があります。

    HTTPハンドラは全く異なる問題であり、この目的では使用しないでください。 (ちょうど、HTTPハンドラに関する記事を公開しました。あなたはhttp://www.blackbeltcoder.com/Articles/asp/writing-a-custom-http-handler-in-asp-netでそれを見ることができます)。

    +0

    「私はそれにHTTPハンドラを使用しません」と説明できますか?私が知る限り、HTTPハンドラは通常のASPXページよりも優れたパフォーマンスを提供しますが、HTTPハンドラの欠点はありません。 –

    +0

    ページルーティングはより簡単で柔軟性があります。それはあなたが説明したもののために設計されています。 HTTPハンドラが高速になる可能性はありますが、ASP.NETページのサポートの一部が実行/ロードされていないためです。私はちょうどカスタムHTTPハンドラを実装しています。それは素晴らしい作品です。しかし、私はそれがあなたが記述したもののための正しいアプローチだとは思わない。 –

    +0

    返信いただきありがとうございます...「直進性と柔軟性」を意味するものをさらに詳しく説明できますか?私はHTTPハンドラのアプローチが非常に簡単で簡単になることを見ています。さらに、URLルーティングソリューションの仕組みについて具体的に説明できますか? Ruduは彼の答えで本当に詳しく述べられました。もう一度、ジョナサンに感謝します。 –

    0

    まず、Jonathan Woodの以前の投稿と同意します.HttpHandler内のルーティングを使用するのは良い考えではありません。しかし、私はそこでの標準的なMVCのルーティングを参照していたと確信しています。

    カスタムルーティングを使用するとよいでしょう。私はそれについての記事を公開しました - Basic Routing for HttpHandler

    関連する問題