1

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

V1
  EventsController

V2
  EventsController

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

 api/v1/events and api/v2/events

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

api/v{version}/{controller}

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

// 如何从 url 中找到 {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中检索此类数据的标准方法是什么?

4

2 回答 2

4

尝试,

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

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

于 2013-05-07T18:00:34.063 回答
0

我在冒险猜测返回值。另一种方法是简单地将其定义为控制器中方法中的参数,如下所示:

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

我只是自己弄清楚了这一点。Web API 很漂亮!

于 2013-08-23T04:09:41.690 回答