public System.Web.Http.Controllers.HttpControllerDescriptor SelectController(System.Net.Http.HttpRequestMessage request)
    {
        var routeData = request.GetRouteData();

        if (routeData == null)
        {
            throw new HttpResponseException(new HttpResponseMessage(System.Net.HttpStatusCode.NotFound));
        }
        string namespaceName = GetRouteVariable <string>(routeData, "namespace");

        if (namespaceName == null)
        {
            throw new HttpResponseException(new HttpResponseMessage(System.Net.HttpStatusCode.NotFound));
        }
        string controllerName = GetRouteVariable <string>(routeData, "controller");

        if (controllerName == null)
        {
            throw new HttpResponseException(new HttpResponseMessage(System.Net.HttpStatusCode.NotFound));
        }
        // Find a matching controller.
        var baseKey = String.Format(CultureInfo.InvariantCulture, "{0}.{1}Controller", namespaceName, controllerName);
        var key     = String.Format("{0}Controller", baseKey);
        HttpControllerDescriptor controllerDescriptor;

        if (_controllers.Value.TryGetValue(key, out controllerDescriptor))     // the default should include the "Controller" at the end of the class name
        {
            return(controllerDescriptor);
        }
        else if (_controllers.Value.TryGetValue(baseKey, out controllerDescriptor))     //explicit class name, sans "Controller"
        {
            return(controllerDescriptor);
        }
        else if (_duplicates.Contains(key))
        {
            throw new HttpResponseException(
                      request.CreateErrorResponse(HttpStatusCode.InternalServerError,
                                                  "Multiple controllers were found that match this request."));
        }
        else
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }
    }