I found a solution.
First I had to inherit from DefaultHttpControllerSelector. Deriving this class allow you to customize the controller selection. In my case, it was that simple.
public class CustomControllerSelector : DefaultHttpControllerSelector
{
private HttpConfiguration _config;
public IHttpControllerSelector PreviousSelector { get; set; }
public CustomControllerSelector(HttpConfiguration configuration):base(configuration)
{
_config = configuration;
}
public override HttpControllerDescriptor SelectController(HttpRequestMessage request)
{
var uriSegments = request.RequestUri.Segments;
var system = uriSegments[2];
request.RequestUri = new System.Uri(request.RequestUri.AbsoluteUri.Replace(system, ""));
var controllerDescriptor = PreviousSelector.SelectController(request);
return controllerDescriptor;
}
}
Than I had to replace the default one with my customization. But I saved the previous one because I used it after the url manipulation.
var previousSelector = config.Services.GetService(typeof(IHttpControllerSelector)) as IHttpControllerSelector;
config.Services.Replace(typeof(IHttpControllerSelector), new CustomControllerSelector(config) { PreviousSelector = previousSelector});
This was my reference.
ASP.NET Web API custom IHttpControllerSelector for a single route