How do I set the default namespaces in MapHttpRoute?

We had this problem with the Umbraco core so we created our own IHttpControllerSelector, the source code can be found here:

https://github.com/WebApiContrib/WebAPIContrib/blob/master/src/WebApiContrib/Selectors/NamespaceHttpControllerSelector.cs

You can also install nuget package WebAPIContrib which contains NamespaceHttpControllerSelector.

To register this you can do this on app startup:

GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector),
    new NamespaceHttpControllerSelector(GlobalConfiguration.Configuration));

The implementation is pretty straight forward and only deals with routes that have the “Namespaces” datatoken set which you have to manually set since the MapHttpRoute doesn’t support this. Example:

var r = routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
r.DataTokens["Namespaces"] = new string[] {"Foo"};

The implementation also only caches controllers found with duplicate names since the underlying default implementation removes duplicates from it’s cache.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)