如何检索给定HttpRequestMessage的路由模板变量
本文关键字:HttpRequestMessage 路由 变量 何检索 检索 | 更新日期: 2023-09-27 18:12:32
我有两个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中检索这些数据的标准方法是什么?
试试,
Request.GetRouteData().Values["version"];
GetRouteData
是一个扩展方法,可以在命名空间System.Net.Http
中使用。
我在冒险猜测返回值。另一种方法是简单地将其定义为控制器方法中的一个参数,如下所示:
public IEnumerable<Event> GetEvents(string version, HttpRequestMessage request) {
...
}
我自己刚弄明白。Web API真是太美了!