Как мне установить пространства имен по умолчанию в MapHttpRoute? - PullRequest
31 голосов
/ 23 февраля 2012

С помощью стандартного метода MapRoute a может передавать коллекцию строк, представляющую пространства имен для поиска моего контроллера.Кажется, это исчезло из MapHttpRoute.Как определить пространства имен по умолчанию, используя новую маршрутизацию API?

Ответы [ 5 ]

16 голосов
/ 27 июня 2014

У нас была эта проблема с ядром 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"};

Реализация также кэширует только контроллеры, обнаруженные с дублирующимися именами, поскольку базовая реализация по умолчанию удаляет дубликаты из своего кэша.

13 голосов
/ 23 февраля 2012

Эта функция в настоящее время не существует.

2 голосов
/ 12 июля 2013

Хотя эта функция в данный момент не существует, вы можете , однако сделайте это, внедрив свой собственный IHttpControllerSelector.

В этой статье блога немного разбираются детали: ASP.NET Web API: использование пространств имен для версий веб-API

0 голосов
/ 27 марта 2013

Перед вызовом MapHttpRoute Factory добавьте

System.Web.Mvc.ControllerBuilder.Current.DefaultNamespaces.Add("Namespace.Full.Controllers"); 
0 голосов
/ 25 августа 2012

Вам не нужно устанавливать пространства имен по умолчанию с помощью Web API, он будет искать контроллеры во всех пространствах имен в ссылочных сборках (публичные типы с именем, заканчивающимся на «Controller», которые реализуют IHttpController).

...