カスタム委任ハンドラーを作成して、要求の応答&チェックにカスタムヘッダーを追加しました。ASP.NET Web APIのコントローラーに固有のカスタム委任ハンドラー
すべてのコントローラに適用され、私はWEBAPI構成
config.MessageHandlers.Add(new customHandler());
にハンドルを追加しました。しかし問題があります。私はコントローラに特有のカスタムヘッダーを適用する必要があります。コントローラ固有のカスタムハンドラを追加することは可能ですか?
カスタム委任ハンドラーを作成して、要求の応答&チェックにカスタムヘッダーを追加しました。ASP.NET Web APIのコントローラーに固有のカスタム委任ハンドラー
すべてのコントローラに適用され、私はWEBAPI構成
config.MessageHandlers.Add(new customHandler());
にハンドルを追加しました。しかし問題があります。私はコントローラに特有のカスタムヘッダーを適用する必要があります。コントローラ固有のカスタムハンドラを追加することは可能ですか?
この記事の最後に、特定のルートにのみハンドラを適用する方法について説明します。http://www.asp.net/web-api/overview/working-with-http/http-message-handlers。そのコントローラーにのみ適用するために、そのコントローラーに固有のハンドラーを作成する必要があります。ごとのルートメッセージハンドラのパイプラインは、あなたがhereを見ることができるようになりますかについて
config.Routes.MapHttpRoute(
name: "MyCustomHandlerRoute",
routeTemplate: "api/MyController/{id}",
defaults: new { controller = "MyController", id = RouteParameter.Optional },
constraints: null,
handler: HttpClientFactory.CreatePipeline(new HttpControllerDispatcher(config), new MyCustomDelegatingMessageHandlerA());
);
。
あなたができることは、ルートごとのメッセージハンドラを使用することですが、ここでは注意してください。彼の答えに@Nickがリンクしている記事として、ハンドラを連鎖させてHttpControllerDispatcher
が関与していることを確認することができます。そうしないと、コントローラのパイプラインに入りません。
私はあなたのカスタムハンドラの基本クラスとしてHttpControllerDispatcher
を使用することです好きなもう一つのオプション:ここで
public class CustomerOrdersDispatcher : HttpControllerDispatcher {
public CustomerOrdersDispatcher(HttpConfiguration config)
: base(config) {
}
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken) {
// Do some stuff here...
return base.SendAsync(request, cancellationToken);
}
}
、あなたはそれを登録する方法:
protected void Application_Start(object sender, EventArgs e) {
var config = GlobalConfiguration.Configuration;
config.Routes.MapHttpRoute(
name: "CustomerOrdersHttpRoute",
routeTemplate: "api/customers/{customerKey}/orders/{key}",
defaults: new { controller = "CustomerOrders", key = RouteParameter.Optional },
constraints: null,
handler: new CustomerOrdersDispatcher(config)
);
config.MessageHandlers.Add(new SomeOtherHandler1());
config.MessageHandlers.Add(new SomeOtherHandler2());
}
SomeOtherHandler1
とSomeOtherHandler2
後が実行されると、CustomerOrdersHttpRouteルートに対してCustomerOrdersDispatcher
が実行されます。したがって、デフォルトハンドラの動作を保持し、ルート固有のハンドラを設定している間にグローバルハンドラを設定することができます。
私のCustomerOrdersDispatcher
:https://github.com/tugberkugurlu/AdvancedWebAPI/blob/master/PerRouteMHOwnershipSample/Dispatcher/CustomerOrdersDispatcher.csの完全実装です。
あなたはそれがうまくいく方法を確認するだけでなく、完全なサンプルアプリケーションのソースコードを表示可能性があります。その本当に自明リンクについてhttps://github.com/tugberkugurlu/AdvancedWebAPI/tree/master/PerRouteMHOwnershipSample
感謝を。 – user1135534
@ kiran-challaとNick、 "Attribute Routing"と同じように動作させるには?それも可能ですか? –
最後に死んだリンク –