Вы можете сделать пользовательский селектор контроллера.Основная идея заключается в том, что вы, прежде всего, создаете обработчик, который будет направлять ваш запрос на ваш контроллер на основе вашей собственной логики (например, ваша логика может быть - если запрос имеет параметр параметров func1, то вы должны направить свой запрос на контроллер func1.)
Вы делаете обработчик:
public class RouteSpecificHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.Properties["UseCustomSelector"] = true;
return base.SendAsync(request, cancellationToken);
}
}
Вы делаете селектор контроллера:
public class CustomSelector : DefaultHttpControllerSelector
{
public CustomSelector(HttpConfiguration configuration) : base(configuration)
{
}
public override HttpControllerDescriptor SelectController(HttpRequestMessage request)
{
if (request.Properties.ContainsKey("UseCustomSelector") &&
request.Properties["UseCustomSelector"] as bool? == true)
{
//your logic goes here
}
return base.SelectController(request);
}
}
config.Routes.MapHttpRoute(
name: "MyRoute",
routeTemplate: "api/dummy/{id}",
defaults: new {controller = "Dummy", id = RouteParameter.Optional},
constraints: null,
handler: new RouteSpecificHandler { InnerHandler = new HttpControllerDispatcher(config) }
);
Вы можете увидеть больше здесь: Пользовательский IHttpControllerSelector веб-API ASP.NET дляодиночный маршрут