none
Enviar arreglo por medio de AngularJS a Controller web api RRS feed

  • Pregunta

  • Amigos quisiera saber si alguno ha usado Angularjs, ya que tengo un problema, necesito mandar una arreglo a un controllador de web api para poder usarla y descargar unos archivos comprimidos, solo que me marca un error que no se como solucionarlo. espero me puedan ayudar.

    ERROR: 

    {"Message":"An error has occurred.","ExceptionMessage":"Multiple actions were found that match the request: \r\nSystem.Collections.Generic.IEnumerable`1[System.Object] Get() on type KioscoWEB.Controllers.Api.RecibosNominaController\r\nBoolean getDescargarRecibosSeleccionados(System.Collections.Generic.IEnumerable`1[System.Int32]) on type KioscoWEB.Controllers.Api.RecibosNominaController","ExceptionType":"System.InvalidOperationException","StackTrace":" en System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)\r\n en System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)\r\n en System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)\r\n en System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncInternal(HttpRequestMessage request, CancellationToken cancellationToken)\r\n en System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)"}

    jueves, 10 de julio de 2014 17:57

Respuestas

Todas las respuestas

  • A la vista del error que te sale, tiene toda la pinta de que has definido más de un método de acción con el mismo nombre y distintos parámetros, sin cambiarles el verbo HTTP. Aunque es legal sobrecargar métodos en C# y el compilador los reconoce sin problemas, cuando llega una petición por HTTP la infraestructura de MVC no sabe cuál de los métodos tiene que ejecutar (a no ser que usen distintos verbos tales como [HttpPost]), y da un error en tiempo de ejecución.

    Cámbiales los nombres a las distintas sobrecargas, a no ser que puedas distinguirlas mediante los verbos a los que han de responder (p.ej., [HttpGet] o [HttpPost]). Pero no es suficiente con que tengan distintos parámetros para que puedan distinguirse en tiempo de ejecución.

    jueves, 10 de julio de 2014 20:43
  • Así tengo el método amigo, lo que pasa es que lo que pasa que por ejemplo, quiero que reciba un arreglo enviado desde la vista a través de angularjs, en angulasjs si lo hace todo bien, solo que por ejemplo si pongo el método que solo reciba un entero osea (int recibosSeleccionados), no me manda el error pero si lo pongo como un arreglo (int[] recibosSeleccionados) me manda ese error, y he intentado no List<> y IEnumerable<> y marca el mismo error, pienso yo que el error es al momento de querer mandar o recibir un arreglo.

    PD: el método es el único que tiene ese nombre, no tengo ninguno con algún nombre similar.

    [HttpGet]
            public HttpResponseMessage DescargarRecibosSeleccionados(int[] recibosSeleccionados)
            {
                return new HttpResponseMessage(HttpStatusCode.OK);
            }

    jueves, 10 de julio de 2014 21:32
  • hola

    pero tienes definido

            [HttpGet]
            public HttpResponseMessage DescargarRecibosSeleccionados(int recibosSeleccionados)
            {
                return new HttpResponseMessage(HttpStatusCode.OK);
            }
    
           [HttpGet]
            public HttpResponseMessage DescargarRecibosSeleccionados(int[] recibosSeleccionados)
            {
                return new HttpResponseMessage(HttpStatusCode.OK);
            }

    valida lo que marco en negrita, eso es lo que Alberto hace referencia

    como envias desde angular el array de valores ? usas el $http.get()

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 10 de julio de 2014 22:07
  • Pues no se si en si sea con ese método que dices amigo Leandro, lo que se, es que si lo envio con Get, solo que no de la manera que tu me planteas ( $http.get() ), lo tengo de la siguiente manera getDescargarRecibosSeleccionados: { method: 'GET', isArray: true }, eso es lo que le dice al metodo que sera un get(), y ya solucione el problema que me marcaba, ya no me aparese el error , solo que no manda el arreglo, al controller lleva null
    jueves, 10 de julio de 2014 22:36
  • si hay varias formas de usar el get de $http

    evaluaste enviarlo los parametros como se comenta aqui

    Send array via GET request with AngularJS' $http service

    o como lo ests enviando ?

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Jesús Espinoza sábado, 12 de julio de 2014 18:47
    viernes, 11 de julio de 2014 2:22
  • Se me ocurre otra posible causa del problema: ¿Tienes habilitado en tu proyecto el WebAPI, además de MVC? Si es así, examina la configuración de rutas, porque seguramente tendrás metida antes la ruta del webapi ({contoller}/{id}) que la ruta de mvc ({contoller}/{action}/{id}). En este caso, el sistema intenta resolver primero el método de acción siguiendo los criterios del WebApi, por lo que busca algún método cuyo nombre empiece por Get y tenga un parámetro IEnumerable. Y de esos sí que puede ser que tengas varios y por tanto la búsqueda resulte ambigua.
    viernes, 11 de julio de 2014 6:17