I had the same problem, it seems to work. A bit of magic, but so far so good:
public class RouteTemplateMiddleware : OwinMiddleware { private const string HttpRouteDataKey = "MS_SubRoutes"; private readonly HttpRouteCollection _routes; public RouteTemplateMiddleware(OwinMiddleware next, HttpRouteCollection routes) : base(next) { _routes = routes; } public override async Task Invoke(IOwinContext context) { var routeData = _routes.GetRouteData(new HttpRequestMessage(new HttpMethod(context.Request.Method), context.Request.Uri)); var routeValues = routeData?.Values as System.Web.Http.Routing.HttpRouteValueDictionary; var route = routeValues?[HttpRouteDataKey] as System.Web.Http.Routing.IHttpRouteData[]; var routeTemplate = route?[0].Route.RouteTemplate;
Register the middleware as follows:
public void Configuration(IAppBuilder app) { _httpConfiguration = new HttpConfiguration(); _httpConfiguration.MapHttpAttributeRoutes(); ... app.Use<RouteTemplateMiddleware>(_httpConfiguration.Routes); ... }
source share