2013-05-13 9 views
13

Web APIコンテキストで実行されているサービスメソッド(コントローラ外)から静的にルート値を取得する方法はありますか?例えば、私は、ASP.NET MVCで、次の操作を行うことができます。Web API get route values

var mvcHandler = HttpContext.Current.Handler as MvcHandler; 
var routeValues = mvcHandler.RequestContext.RouteData.Values; 

私は、Web APIのためのこのコードの同等のバージョンを確認したいと思います。

HttpContext.Current.HandlerのサンプルWeb APIリクエストをデバッグしようとすると、タイプはHttpControllerHandlerですが、このタイプにはルートデータにアクセスするためのプロパティはありません。

EDIT

いくつかのより多くの情報を提供するのに役立つしようとします。値を読み取ろうとしているコードは、自分のアプリケーション用のカスタムオブジェクトを構築するファクトリクラスの内部にあります。

+0

カイル、私たちのコードのWeb APIバージョンを投稿してください。 –

+0

これは私が理解しようとしていることです:) – Kyle

+0

あなたは 'System.Web.Httpを使用していたことを意味しますか? var handler = Http.Current.Handler 'これはHttpControllerHandlerであることがわかりましたか? –

答えて

10

私は、MVCリクエストまたはWeb APIリクエストのいずれかのルート値を取得するソリューションを見つけることができました。

HttpContext.Current.Request.RequestContext.RouteData 
18

HttpRequestMessageでGetRouteData()拡張を使用できます。これを取得するには、System.Net.Http名前空間を含める必要があります。

System.Web.Http.Routing.IHttpRouteData routeData = Request.GetRouteData(); 
+0

ありがとう。これはコントローラ内では動作すると思われますが、コントローラの外ではHttpContext.Current.RequestはHttpRequestMessageタイプではなく(キャストできません)。私はこれをOPでより明確にするべきだった。 – Kyle

+0

いいえ、HttpRequestMessageにアクセスできる場所ならどこでもアクセスできます。 「パブリッククラスDelegateHandlerA:メッセージハンドラ内部例DelegatingHandlerタスク SendAsync(HttpRequestMessage要求、CancellationToken cancellationToken) {System.Web.Http.Routing.IHttpRouteData routeData = request.GetRouteData()非同期 {保護オーバーライド。 HttpResponseMessage response = await base.SendAsync(request、cancellationToken); 返品対応; } } ' –

+0

BTW、GetRouteData()拡張は、WebHost(IIS)およびSelfHost(HttpContextが利用できない場合)シナリオでも一貫性のあるエクスペリエンスを提供します。 –

関連する問題