如何在给定HttpRequestMessage的情况下检索路由模板变量?

时间:2013-05-07 13:20:07

标签: c# asp.net controller versioning asp.net-web-api

我有两个API控制器位于两个不同的文件夹中,这些文件夹具有GetEvents()操作:

V1
  EventsController

V2
  EventsController

我希望能够使用以下方式访问控制器:

 api/v1/events and api/v2/events

我的路线模板看起来像这样

api/v{version}/{controller}

私有静态字符串GetRequestVersion(HttpRequestMessage请求)  {

//如何从网址中找到{version}值?

}

我使用REGEX编写了一个代码可以正常工作:

 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中检索此类数据的标准方法是什么?

2 个答案:

答案 0 :(得分:4)

尝试,

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

GetRouteData是一种扩展方法,可在命名空间System.Net.Http中使用。

答案 1 :(得分:0)

我猜测返回值。另一种方法是将它定义为控制器中方法中的参数,如下所示:

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

我自己就是这么想的。 Web API很漂亮!