在我的Web API处理程序中,我需要获取与请求匹配的路由的名称.
public class CurrentRequestMessageHandler : DelegatingHandler { protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,CancellationToken cancellationToken) { var route = request.GetRouteData().Route; //now what? return base.SendAsync(request,cancellationToken); } }
解决方法
目前,无法在Web API中检索路由的路由名称.您可以查看HttpRouteCollection源代码
here以获取更多详细信息.如果您的方案确实需要路由名称,则可以在路由的数据标记中插入路由名称. (请注意,当前属性路由不提供访问数据令牌的方法)
更新 – 2014年6月23日
通过属性路由领域的最新改进(5.2 RC),您可以执行以下操作,将路径名称插入到数据令牌中.
config.MapHttpAttributeRoutes(new CustomDefaultDirectRouteProvider()); public class CustomDefaultDirectRouteProvider : DefaultDirectRouteProvider { public override IReadOnlyList<RouteEntry> GetDirectRoutes(HttpControllerDescriptor controllerDescriptor,IReadOnlyList<HttpActionDescriptor> actionDescriptors,IInlineConstraintResolver constraintResolver) { IReadOnlyList<RouteEntry> coll = base.GetDirectRoutes(controllerDescriptor,actionDescriptors,constraintResolver); foreach(RouteEntry routeEntry in coll) { if (!string.IsNullOrEmpty(routeEntry.Name)) { routeEntry.Route.DataTokens["Route_Name"] = routeEntry.Name; } } return coll; } }
像这样访问它:reequest.GetRouteData().Route.DataTokens [ “ROUTE_NAME”]