У нас была эта проблема с ядром Umbraco, поэтому мы создали наш собственный IHttpControllerSelector, исходный код которого можно найти здесь:
https://github.com/WebApiContrib/WebAPIContrib/blob/master/src/WebApiContrib/Selectors/NamespaceHttpControllerSelector.cs
Вы также можете установить пакет nuget WebAPIContrib
, содержащий NamespaceHttpControllerSelector
.
Чтобы зарегистрировать это, вы можете сделать это при запуске приложения:
GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector),
new NamespaceHttpControllerSelector(GlobalConfiguration.Configuration));
Реализация довольно проста и имеет дело только с маршрутами, для которых установлен набор данных «Пространства имен», который необходимо установить вручную, поскольку MapHttpRoute не поддерживает это. Пример:
var r = routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
r.DataTokens["Namespaces"] = new string[] {"Foo"};
Реализация также кэширует только контроллеры, обнаруженные с дублирующимися именами, поскольку базовая реализация по умолчанию удаляет дубликаты из своего кэша.