none
No he podido configurar bien el config.Routes.MapHttpRoute RRS feed

  • Pregunta

  • Buen dia

    tengo configurada las rutas y el controller de esta forma en el webApiConfig

     public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // Configuración y servicios de API web
    
                // Rutas de API web
                config.MapHttpAttributeRoutes();
    
                // AÑADE EL HANDLER DE VALIDACIÓN DE TOKENS
                config.MessageHandlers.Add(new ValidatorTokenHandler());
    
    
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{action}/{id}/{fecha}",
                    defaults: new { id = RouteParameter.Optional, fecha = RouteParameter.Optional }
                );
    
            }
        }

    parece que no reconociendo bien las rutas que se indican 

    Tengo 3 metodos de post (que son para consultas) que reciben unos parámetros como id, fecha y un list de objetos 

    uno de estos esta asi:

    [HttpPost]
        [Route("api/ConsultasGP/ConsultasPuertos/{id}/{fecha}")]
    
        public async Task<IList<PuertosGP>> ConsultasPuertos([FromUri]string id, 
             [FromBody] List<PuertosGP> lstPuertosGP, [FromUri]DateTime fecha)
            { ..... demas codigo

    [HttpPost]
        [Route("api/ConsultasGP/ConsultasBahiasPorFecha/{id}/{fecha}")]
    
        public async Task<IList<BahiasGP>> ConsultasBahias([FromUri]string id, 
             [FromBody] List<BahiasGP> lstbahGP, [FromUri]DateTime fecha)
            { ..... demas codigo

    el otro

    [HttpPost]
        [Route("api/ConsultasGP/ConsultasBahiasPorRangoFecha/{fechaIni}/{fecha}")]
    
        public async Task<IList<BahiasGP>> ConsultasBahiasPorRangoFecha([FromUri]string id, 
             [FromUri] DateTime fechaIni [FromUri]DateTime fecha)
            { ..... demas codigo

    los errores al invocar los métodos por postman muestra

    No se encontró ninguna acción en el controlador 'ConsultasGP' que coincida con el nombre 'ConsultasmETODOxxx

    AYUDA con este tema de rutas, estoy usando webapi rest con framework 4.6 

    martes, 19 de noviembre de 2019 13:02

Respuestas

  • y no tengo un [RoutePrefix] en la clase controlador... recomiendas colocarlo?

    Unicamente si todos los metodos del controlador usan el mismo prefijo. Por ejemplo, si todos empiezan por "api/ConsultasGP" pues entonces pones eso en el [RoutePrefix(...)] al principio, y despues en cada Route solo tienes que poner lo que venga detras, por ejemplo, [Route("ConsultasPuertos/{id}/{fecha}")].

    Pero eso solo sirve para simplificar el texto. Si no te funcionan las rutas, seguiran sin funcionar aunque las fracciones separando el prefijo.

    Lo unico que se me ocurre es repasar y repasar. Empieza probando con un metodo sencillo que no tome parametros, y si lo reconoce bien, ve agregando mas funcionalidad poco a poco hasta que consigas aislar cual es la parte que ocasiona el problema.

    • Marcado como respuesta greg_dorian martes, 19 de noviembre de 2019 20:31
    martes, 19 de noviembre de 2019 16:56

Todas las respuestas

  • Una observacion: El MapHttpRoute no vale para nada si estas usando el atributo [Route] en el controlador. El Route tiene prioridad sobre lo que haya en el mapa de rutas.

    Asegutare de que no tienes un [RoutePrefix] a nivel de la clase del controlador.

    Asegurate de que en Postman pones exactamente el mismo nombre que en el Route. En una pregunta que pusiste antes tenias un par de letras cambiadas.

    Cerciorate de que el formato de fecha que pones en la uri concuerda con el formato que entiende el DefaultBinder para tu controlador. Y tambien de que tienen un formato que no contenga barras. Por ejemplo, si pasas 19/11/2019, el sistema entendera que son tres porciones para la ruta, no una unica fecha, porque la ruta usa la barra como separador.

    martes, 19 de noviembre de 2019 14:01
  • hola alberto si tienes razon 

    Estoy tratando de ... "Personalizar" los métodos y que sean tomados con el [Route] pero aun sigue Mostrando que no ninguna accion para los metodos que llamo por POSTMAN

    Route("api/ConsultasGP/ConsultasPuertos/{id}/{fecha}")

    Y en los otros dos; las fechas las ingreso con guines y sin ellos, nunca con slash "/"

    y no tengo un [RoutePrefix] en la clase controlador... recomiendas colocarlo?


    • Editado greg_dorian martes, 19 de noviembre de 2019 14:27
    martes, 19 de noviembre de 2019 14:23
  • y no tengo un [RoutePrefix] en la clase controlador... recomiendas colocarlo?

    Unicamente si todos los metodos del controlador usan el mismo prefijo. Por ejemplo, si todos empiezan por "api/ConsultasGP" pues entonces pones eso en el [RoutePrefix(...)] al principio, y despues en cada Route solo tienes que poner lo que venga detras, por ejemplo, [Route("ConsultasPuertos/{id}/{fecha}")].

    Pero eso solo sirve para simplificar el texto. Si no te funcionan las rutas, seguiran sin funcionar aunque las fracciones separando el prefijo.

    Lo unico que se me ocurre es repasar y repasar. Empieza probando con un metodo sencillo que no tome parametros, y si lo reconoce bien, ve agregando mas funcionalidad poco a poco hasta que consigas aislar cual es la parte que ocasiona el problema.

    • Marcado como respuesta greg_dorian martes, 19 de noviembre de 2019 20:31
    martes, 19 de noviembre de 2019 16:56