2013-05-07 50 views
1

我都位於擁有GetEvents兩個不同文件夾兩個API控制器()動作:如何獲取給定HttpRequestMessage的路由模板變量?

V1 
    EventsController 

V2 
    EventsController 

我希望能夠通過訪問控制器:

api/v1/events and api/v2/events 

我的路線模板看起來這樣

api/v{version}/{controller} 

私人靜態字符串GetRequestVersion(HttpRequestMessage請求) {

//如何從url中找到{version}值?

}

我已經寫了使用正則表達式代碼的正常工作:

private static string ExtractVersionFromUrl(HttpRequestMessage request) 
     { 
      Match match = Regex.Match(request.RequestUri.PathAndQuery, @"/v(?<version>\d+)/", RegexOptions.IgnoreCase); 

      return match.Success ? match.Groups["version"].Value : null; 
     } 

什麼是從URI retreive這些數據的標準方法?

回答

4

嘗試,

Request.GetRouteData().Values["version"]; 

GetRouteData是一個擴展方法和是命名空間中的System.Net.Http可用。

0

我正在冒險猜測返回值。另一種方式做,這是簡單地將其作爲像這樣在你的方法參數控制器:

public IEnumerable<Event> GetEvents(string version, HttpRequestMessage request) { 
... 
} 

我想通了這一點自己。 Web API非常漂亮!