我有两个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中检索此类数据的标准方法是什么?
答案 0 :(得分:4)
尝试,
Request.GetRouteData().Values["version"];
GetRouteData
是一种扩展方法,可在命名空间System.Net.Http
中使用。
答案 1 :(得分:0)
我猜测返回值。另一种方法是将它定义为控制器中方法中的参数,如下所示:
public IEnumerable<Event> GetEvents(string version, HttpRequestMessage request) {
...
}
我自己就是这么想的。 Web API很漂亮!