2013-05-13 117 views
13

有什麼方法可以從Web API上下文中運行的服務方法(控制器之外)靜態獲取路由值?例如,我可以做以下的ASP.NET MVC:Web API獲取路由值

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

我想找到這段代碼的Web API相當於版本。

當我嘗試調試示例Web API請求並查看HttpContext.Current.Handler時,它的類型爲HttpControllerHandler,但此類型沒有任何屬性來訪問路由數據。

編輯

要儘量幫助提供一些更多的信息。我想從中讀取值的代碼是在工廠類的內部,我爲它構建了一個自定義對象。

+0

Kyle,請您爲我們發佈Web API版本的代碼? – 2013-05-13 17:36:19

+0

這就是我試圖找出:) – Kyle 2013-05-13 17:38:12

+0

你的意思是你'使用System.Web.Http; var handler = Http.Current.Handler',並發現它是HttpControllerHandler? – 2013-05-13 17:40:28

回答

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 2013-05-13 18:00:58

+0

不,您可以在任何可以訪問HttpRequestMessage的地方訪問它。消息處理程序內例如:「公共類DelegateHandlerA:DelegatingHandler { 保護覆蓋異步任務 SendAsync(HttpRequestMessage請求,的CancellationToken的CancellationToken) { System.Web.Http.Routing.IHttpRouteData的RouteData = request.GetRouteData(); HttpResponseMessage response = await base.SendAsync(request,cancellationToken); 返回響應; 012W} }' – 2013-05-13 18:05:53

+0

順便說一句,GetRouteData()擴展會爲WebHost(IIS)和SelfHost(其中HttpContext不可用)場景提供一致的體驗。 – 2013-05-13 18:07:42