この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。
建築家
建築家
リスト
放送
茶屋
インテリジェントAI会話
.NETキャリア&テクニカルカレッジ
ちっちゃいなクズブログ
この版
利用者
Architect_Programmer_Code農業ネットワーク
»
建築家
›
プログラミング
›
.Net/C#
›
Asp.Net IHttpHandlerが導入しました
眺める:
20191
|
答える:
0
[ASP.NET]
Asp.Net IHttpHandlerが導入しました
[リンクをコピー]
クズども
掲載地 2018/03/13 21:40:17
|
|
|
|
Asp.Net IHttpHandlerが導入しました
Httpリクエストに応答する際によく使われる処理インターフェース ASP.NET IHttpHandlerとIHttpModuleがあります。
一般的に、IHttpHandlerは各*.asp、*.aspxファイルの個別処理など、特定の種類のリクエストを処理するために使用されます。 IHttpモジュールは通常、リクエストページで同じチェックを行うなど、リクエストでよく求められる操作を処理するために使用されます。
対応するHTTPリクエストを行った際のIISサーバーの処理ステップを見てみましょう。 ASP.NET にはパイプラインの概念があり、各 ASP.NET リクエストはIIS内で一連の対応する操作を経て、線状のシーケンスを形成します。
ASP.NET パイプライン導入
パイプラインの処理タイミング図を見てみましょう。
図からもわかるように、リクエストが到着した後、実装はHttpModuleによって処理され、その後HttpHandlerのProcessRequest()メソッドが呼び出されて特定の応答を行います。 したがって、クラス固有のリクエストの処理がHttpHandlerクラスに置かれ、HttpModule内のすべてのリクエストに共通するチェックを行う理由は容易に理解できます。
コード実務
IHttpハンドラー
著者は最近、プロジェクトでクライアントインターフェースコールを処理するためにIHttpHandlerを使用していることに触れたので、IHttpHandlerに基づくシンプルなインターフェース設計について簡単に説明しましょう。
IHttpHandlerインターフェースには2つのメンバーのみがいます:
ログインが見えます。
IsReusable属性は、HttpHandlerオブジェクトが他のインスタンスで使用可能かどうかを示し、通常はTrueに設定します。 ProcessRequest() メソッドはリクエストに対する特定の応答であり、ここに特定のビジネスロジック操作を入れるだけで済みます。
まず、新しいウェブプロジェクトを作成し、Handlerクラスを追加します。
ログインが見えます。
RayHandlerクラスはIHttpHandlerインターフェースのProcessRequest()関数を実装しており、これはテキストの直接出力に過ぎません。
次に、Web.configファイルに以下の設定を加える必要があります:
ログインが見えます。
pathはURLマッチング(例:*.ray)を示し、これはハンドラーが「.ray」で終わるURLリクエストに応答することを意味します。verbはリクエストメソッド(Get/Post)を示し、*はすべて一致します。 typeはHandlerクラスの型を示し、WebApplication2はクラス名です。RayHandlerはクラス名、WebApplication2はBinディレクトリ内のアセンブリ名を指します。例えば、例のアセンブリ名はWebApplication2.dllであり、ここでサフィックス名を定義する必要はありません。
サイトを起動し、「.ray」で終わるURLを入力すると、次の結果が表示されます。
IHttpハンドラー工場概要
時には複数の異なる接尾辞を扱う必要があり、そのうち1つはハンドラークラスに対応しています。これが私たちのWeb.configファイルの見た目です:
ログインが見えます。
HttpHandlerの実装クラスが多ければ、Web.configファイルの構成は冗長に見えるのは避けられません。 あるいは、プログラムが実行中でどのハンドラーが応答するかしか判別できない場合は、IHttpHandlerFactoryを使う必要があります。
IHttpHandlerFactoryは次のように定義されています:
ログインが見えます。
その中で:
GetHandler(): IHttpHandlerインターフェースを実装したインスタンスを返します。
ReleaseHandler(): Factoryが既存のHandlerインスタンスを再利用できるようにします。
上記のrayおよびrssリクエストを例として、Factoryクラスを実装します。
ログインが見えます。
この場合、Web.configの設定は以下の通りです:
ログインが見えます。
この時点で、Factoryクラスを異なる特定のハンドラーに対応する関数として実装され、構成が簡素化されました。
スケーラブルなIHttpハンドラーファクトリー
上記の実装では、将来的に新しい接尾辞処理メソッドを追加する必要がある場合、GetHandler()のSwitch文を修正する必要があります。これによりエラーやその他のセキュリティリスクが生じる可能性があります。 では、HandlerFactoryクラスをその後の拡張でも変更せずに維持することは可能でしょうか?
答えは間違いなく「はい」です。 デザインパターンに詳しい読者は、これが単純な工場パターンであることを理解し、前述の機能を実現するために「アドバンスドポイント」と呼ばれるデザインモードを利用できます。
ここでもC#言語の言語機能である反射を利用できます。 C#のリフレクション機構を通じて、URLの接尾辞とハンドラーのクラス名との対応に合意している限り、URLの接尾辞に従って対応するHanlder型を反映します。
例えば、GetHandler() を次のように書き換えます:
ログインが見えます。
この場合、HandlerクラスをHandlerFactoryクラスと同じ名前空間のメソッドに入れ、Web.configで正しく設定すれば十分です。 例えば、RayHandlerクラスが存在する場合、自動的にマッチングするために以下の構成を追加すべきです。
ログインが見えます。
概要
本記事では、ASP.NET におけるIHttpHandlerの使用を簡単に紹介し、複数のハンドラー要求を処理する際のIHttpHandlerFactoryの実装を提供し、最後にC#のリフレクション機構を用いたスケーラブルなマルチリクエストハンドラー実装を改善します。
先の:
asp.net HttpContextの説明的意味
次に:
asp.net IHttpModuleインターフェースについて詳しく説明しています
関連記事
•
[劇作家] (3) エラー例外を検出するための自動テスト
•
ゲストモードでのDiscuz x3.4投稿におけるユーザーステータスの最適化
•
Charles Proxy Scraping HTTPS パケットチュートリアル
•
エンタープライズのWeChatアプリケーションのウェブページはウィンドウを閉じます
•
NginxはGzipを使ってウェブサイトのパフォーマンス最適化(チューニング)
•
Nginxウェブサイト HTTPS最適化OCSPバインディング
•
エンタープライズWeChatに埋め込まれたスキャンコードログイン機能 reportEvent issue
•
中国で有名なIDCクラウドサービスプロバイダーです。
•
Charles Proxyはlocalhost、127.0.0.1のネイティブトラフィックをクロールできません
•
Discuz optis loading home.php?mod=misc&ac=sendmail&rand=1759095001
閲覧したセクション
サーバー構成
ジャワ
その他の番組編成
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。
Mail To:help@itsvse.com