route net mvc multiple maphttproute httpget attribute asp asp.net-mvc-routing asp.net-mvc-4 asp.net-web-api

asp.net-mvc-routing - net - route controller c#



¿Cómo configuro los espacios de nombres predeterminados en MapHttpRoute? (6)

Antes de la llamada MapHttpRoute Factory, agregue

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

Con el método MapRoute estándar a puede pasar una colección de cadenas que representa los espacios de nombres en los que buscar mi controlador. Esto parece haber desaparecido de MapHttpRoute. ¿Cómo se definen los espacios de nombres predeterminados utilizando el nuevo enrutamiento API?



Esa característica no existe actualmente.



No necesita establecer espacios de nombres predeterminados con la API web, buscará controladores en todos los espacios de nombres en los ensamblados a los que se hace referencia (tipos públicos con el nombre que termina en "Controlador" que implementa IHttpController).


Tuvimos este problema con el núcleo de Umbraco, así que creamos nuestro propio IHttpControllerSelector, el código fuente se puede encontrar aquí:

https://github.com/umbraco/Umbraco-CMS/blob/7.1.5/src/Umbraco.Web/WebApi/NamespaceHttpControllerSelector.cs

Para registrar esto, puede hacerlo al inicio de la aplicación:

GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector), new NamespaceHttpControllerSelector(GlobalConfiguration.Configuration));

La implementación es bastante directa y solo se trata de rutas que tienen el conjunto de datos de espacios "Espacios de nombres" que debe establecer manualmente, ya que MapHttpRoute no es compatible con esto. Ejemplo:

var r = routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); r.DataTokens["Namespaces"] = new string[] {"Foo"};

La implementación también solo almacena en caché los controladores encontrados con nombres duplicados ya que la implementación predeterminada subyacente elimina los duplicados de su caché.