Подтвердить что ты не робот

Как установить пространство имен по умолчанию в MapHttpRoute?

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

4b9b3361

Ответ 1

У нас была эта проблема с ядром Umbraco, поэтому мы создали собственный IHttpControllerSelector, исходный код которого можно найти здесь:

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

Вы также можете установить пакет 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"};

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

Ответ 2

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

Ответ 5

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

Ответ 6

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

System.Web.Mvc.ControllerBuilder.Current.DefaultNamespaces.Add("Namespace.Full.Controllers");