2013-09-06 10 views
6

DelegatingHandlerを継承します。HttpMessageHandler。しかし、同じ方法を実装する必要があることを考えれば、違いを理解することはできませんでした。SendAsyncの両方を実行する必要があります。HttpMessageHandlerとDelegatingHandler

この2つのハンドラの違いは何ですか?それぞれをいつ使うべきですか?

答えて

14

ASP.NETに精通している場合は、HTTPハンドラとモジュールによく似ています。 HttpMessageHandlerを実装する場合は、SendおよびSendAsyncメソッドを実装し、応答または応答の約束を返します。これは、HTTPハンドラに似ています。 DelegatingHandlerを実装してconfig.MessageHandlersコレクションに追加すると、クラスはパイプラインで実行され、HTTPモジュールと同様に要求と応答を確認して反応することができます。 DelegatingHandlerも、SendAsyncの実装の一部として、内部ハンドラのSendAsyncを呼び出すことを除いて、HttpMessageHandlerです。内側のハンドラも同じことを行い、中国のボックスやロシアの人形の効果を得ます。パイプラインが始まるHttpServerはそれ自体がDelegatingHandlerです。

+0

は、web.configファイルにメッセージハンドラを設定する方法誰を知っています – Gurpreet

0

違いは非常に微妙です。 @バドリはあなたに素早い説明をくれました。

at this posterと見ると、あなたはそれが何であるかを理解しています。独自のDelegatingHandlersを作成するときには、特にHTTP以外のものを使いこなす必要はありません。それはPOSTの場合にBODYで遊ぶための場所ではありません。例えば。

あなたが行うことができる便利なことの1つは、ヘッダーにトークンが存在しないことをパイプの非常に早い段階で検出することです。次に、要求を直ちに終了してStatusCode.Forbidden応答を作成します。もちろん、シンプルなウェブサイトでは必要ないかもしれません。ちょっと残忍。しかし、1分に数百万通のコールを受信して​​いる場合は、コントローラーが実際にインスタンス化される直前に発生するため、非常に便利です。

本当に必要なケースはほんのわずかです。または、残りの呼び出しを行っているクライアントがGETとPOSTのみを行うことができますが、ヘッダーでX-Method-Override = PUTを指定している場合は、POSTからPUTへ要求メソッドを変更して、/actionディスパッチャは適切なインスタンスを作成し、適切なアクションを呼び出します。

ここは興味深いポスターです。それを印刷:D

http://www.asp.net/media/4071077/aspnet-web-api-poster.pdf

関連する問題