RouteContext as constructor parameter or method parameter in ASP.NET vNext
Since you need something that persists for the duration of request, a better place would be to add to RequestContext. So there are couple of ways to handle this more cleanly:

Add a base controller and add additional data to RequestContext:

protected override void Execute(System.Web.Routing.RequestContext requestContext)
{
    // get additional data
    ...

    // add them to routeDate
    requestContext.RouteData.Values.Add(key, value);
    ...

    base.Execute(requestContext);
}


Add your own custom RouteHandler and add additional data to RequestContext:

public class CustomRouteHandler : MvcRouteHandler 
{ 

    protected override IHttpHandler GetHttpHandler(RequestContext requestContext){
           // add to HttpContext
           requestContext.HttpContext.Items["Custom"] = data;

           // or RouteData
           requestContext.RouteData.Values.Add(key, value);
        }
        return base.GetHttpHandler(requestContext);
    }

}

// define route with custom handler 
Route customRoute = new Route (
    url: ...,
    defaults: null,
    constraints: ...,
    routeHandler: new CustomRouteHandler()
});

routes.Add(customRoute);