tutorial route query parameter net attribute asp asp.net-web-api asp.net-web-api-routing

asp.net-web-api - query - web api route attribute



asp.net webapi 2 atributo routing no funciona (7)

Tengo visual studio 2012 instalado con mvc4 usando .NET Framework 4.5. Ahora quiero usar webapi2 con escritura de atributos y quiero que mi página hlep muestre todos los puntos finales correctamente.

En mi solución, agregué un nuevo proyecto mtc4 base emtpy y usando nuget me actualicé a mvc5 y luego instalé los paquetes de webapi2. Finalmente, he instalado el paquete de ayuda para webapi2.

ahora, cuando uso routeprefix, no puedo ver ningún contenido en la página de ayuda y cuando trato de acceder a mi punto de acceso webapi en los navegadores, arroja el siguiente error.

http://expressiis.com/api/v1/

<Error> <Message> No HTTP resource was found that matches the request URI ''http://expressiis.com/api/v1/''. </Message> <MessageDetail> No type was found that matches the controller named ''v1''. </MessageDetail> </Error> namespace WebApi.Controllers { [RoutePrefix("api/v1")] public class SubscribersController : ApiController { // GET api/<controller> [Route("")] [HttpGet] public IQueryable<string> Get() { return new string[] { "value1", "value2" }.AsQueryable(); } } }


En mi caso, VS crea mi controlador con el nombre

TestController1

No sé por qué puso este número "uno" al final del nombre, pero lo elimina y funcionará.


En mi caso, la siguiente línea creaba un problema, simplemente lo comenté y todo comenzó a funcionar

config.MapHttpAttributeRoutes();

Coméntelo en el archivo WebApiConfig.cs


Esta pregunta ya tiene una respuesta seleccionada. Pero tenía una solución diferente para mí y creo que sería útil responder si la respuesta seleccionada no ayuda.

Para mí fue un error tonto. Tenía dos controladores pero solo uno estaba trabajando. ¡Las soluciones fueron que mi clase de controlador fue nombrada incorrectamente!

Mi controlador de trabajo-

public class FooController : ApiController { }

Mi controlador no funcional-

public class BarControllers : ApiController { }

Asegúrese de que su clase de controlador termine en Controller . ¡El final me atrapó!


Este no era su caso (como se desprende de su código de muestra), pero recuerde finalizar el nombre de la clase del Controller con el Controller .

De lo contrario, no será recogido por config.MapHttpAttributeRoutes(); .


Según su información, parece que no está llamando a httpConfig.MapHttpAttributeRoutes() (Asegúrese de llamar esto antes de cualquier registro de enrutamiento tradicional)

Como no ha llamado a MapHttpAttributeRoutes, su solicitud parece coincidir con una ruta tradicional, por ejemplo, como api/{controller} . Esto no funcionará porque las rutas que coinciden con las rutas tradicionales nunca verán los controladores / acciones decorados con rutas de atributos.


También tuve este problema y después de una larga búsqueda me di cuenta de que estaba usando System.Web.Mvc.RouteAttribute lugar de System.Web.Http.RouteAttribute Después de corregir esto y usar config.MapHttpAttributeRoutes() everything worked fine.


Un problema que encontré estaba relacionado con el orden en Application_Start (). Tenga en cuenta el orden de la configuración de la API web a continuación:

Esto no funciona

protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); GlobalConfiguration.Configure(WebApiConfig.Register); }

Esto funciona

protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); }