tutorial route query net multiple asp c# .net asp.net-mvc asp.net-web-api attributerouting

route - web api rest c#



Obteniendo "No se encontró ningún tipo que coincida con el controlador llamado ''SampleSlashBaseService''" al intentar usar WebAPI (5)

Tengo un proyecto webapi con un ApiController base llamado SlashBaseService:

[RouteArea("uBase")] public abstract class SlashBaseService : ApiController { }

El dll resultante se usa en un proyecto de WebForms así que también tengo una clase WebActivator con el siguiente código para generar rutas:

RouteTable.Routes.MapHttpAttributeRoutes(config => { // Get all services inheriting from SlashBaseService foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { foreach (var type in assembly.GetTypes()) { if (type.IsSubclassOf(typeof(SlashBaseService))) { // Scan assembly config.ScanAssembly(assembly); // Skip the remaining types in this assembly break; } } } }); RouteTable.Routes.MapHttpRoute( name: "DefaultBase", routeTemplate: "base/{controller}/{id}", defaults: new { id = RouteParameter.Optional });

También tengo un servicio de prueba en un ensamble por separado:

public class SampleSlashBaseService : SlashBaseService { [GET("TestOpenMethod")] public string GetTestOpenMethod() { return "Hello anonymous!"; } [GET("Echo/{message}")] public string GetEcho(string message) { return message; } }

Todas las cosas bastante simples. El problema es cuando trato de ir a una de las direcciones URL que esto genera. Recibo el siguiente mensaje:

No se encontró ningún tipo que coincida con el controlador llamado ''SampleSlashBaseService''.

La lista de rutas de /routes.axd también se ve correcta.


Encontrado el problema

ApiControllers nombres de clase de ApiControllers deben tener el sufijo "Controlador" y el mío no. SampleSlashBaseController a SampleSlashBaseController resolvió el problema.

NOTA: Es posible IHttpControllerSelector sufijo "Servicio" como lo hice, pero luego debe implementar un IHttpControllerSelector personalizado como se describe aquí: http://netmvc.blogspot.no/2012/06/aspnet-mvc-4-webapi -support-areas-in.html


También debe asegurarse de que la clase de controlador sea pública


En mi caso, el controlador se definió correctamente, pero no se marcó como público.


En mi caso, había dos controladores con el mismo nombre, en diferentes carpetas. Renombrarlos resolvió el problema al instante.


Por lo que vale, me encontré con esto y mi problema era que mi clase agregada manualmente no heredaba de ApiController. La definición de clase debe ser de public class QueueController : ApiController no de public class QueueController . Qué tonto pasar por alto.