Get matched route name in Web API

Ven*_*kov 8 asp.net asp.net-web-api

In my Web API handler I need to get the name of the route that matched the request.

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Kir*_*lla 8

目前,无法在Web API中检索路由的路由名称.您可以在此处查看HttpRouteCollection源代码以获取更多详细信息.如果您的方案肯定需要路由名称,则可以在路由中添加路由名称.(请注意,当前属性路由不提供访问数据令牌的方法)data tokens

更新 - 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样访问它:
reequest.GetRouteData().Route.DataTokens["Route_Name"]