¿Por qué es tan difícil obtener valores de ruta fuera del contexto del controlador?

No entiendo cuál es el problema detrás de esto, por qué es tan fácil obtener valores de ruta dentroRequest del controlador pero casi imposible hacer lo mismo enHttpContext.Current.Request?

Tal vez simplemente no conozco una mejor manera y existe. ¿Alguien puede confirmar que esta es la única forma de obtener datos de ruta fuera del controlador?

Ejemplo
[Route("{id}"), HttpGet]
public IHttpActionResult Test()
{
    // Simple and easy
    var route1 = Request.GetRouteData().Values["id"];

    // Wat. This is also ~6 times slower
    var routeValues = (IHttpRouteData[]) HttpContext.Current.Request.RequestContext.RouteData.Values["MS_SubRoutes"];
    var route2 = routeValues.SelectMany(x => x.Values).Where(x => x.Key == "id").Select(x => x.Value).FirstOrDefault();

    return Ok(route1 == route2); // true
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta