entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Error al sobre-cargar método GET de un Controller en ASP.NET

Hola!, estoy haciendo un proyecto web para la universidad, y no encuentro una respuesta clara a mi problema, yo tengo un controlador el cual posee 3 metodos GET, uno con parámetros y otro sin parámetros, pero cuando intento acceder a uno de los dos, me dice que "Se encontraron varias acciones que coincidían con la solicitud", ahora lo detallo más con ejemplo de mi código

    public class TeamController : ApiController
    {

        [Authorize]
        [HttpGet]
        public IHttpActionResult Get(string queryParam = "", string AmAdmin = "")
        {
          ...
        }

        // GET api/team
        [Authorize]
        public IHttpActionResult Get()
        {
          ...   
        }

        // GET api/team/id
        [Authorize]
       public IHttpActionResult Get(string id)
       {
         ...   
        }
    }

Las consultas que desearía hacer son "/api/team/" o "/api/team?queryParam=Hola&AmAdmin=True" o "/api/team/T1" por ejemplo
Adjunto también el ruteo que tengo seteado en el proyecto

   routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

0voto

juansolo comentado

Estas usando parámetros por defecto por eso entra en conflicto entre el primero y el segundo GET.

0voto

Emanuel Costi comentado

Probé escribiendo así

Get(string queryParam = "", string AmAdmin = "")

y así

Get(string queryParam, string AmAdmin)

y no funciona

0voto

juansolo comentado

Puedes hacer esto:

public IHttpActionResult Get(string queryParam = "", string AmAdmin = "")  {
   if(string.IsNullOrEmpty(querParam) && (string.IsNullOrEmpty(AmAdmin)) {
     //Aquí el código para  "/api/team/"
   } else {
     //Aquí el código para   "/api/team?queryParam=Hola&AmAdmin=True"
   }
};

0voto

Emanuel Costi comentado

Creo que va a ser lo mejor, Gracias !

0voto

Leonardo-Tadei comentado

Hola Emanuel,

no tengo ni idea de este lenguaje, pero lo primero que pensé, por analogía con otros lenguajes, es que el problema está en los parámetros por default que tiene el 1er método, tal como dice @juansolo.

Lo que yo probaría es definir los métodos así:

public IHttpActionResult Get(string queryParam, string AmAdmin) { ...
public IHttpActionResult Get() { ...
public IHttpActionResult Get(string id) { ...

de manera tal que la sobreescritura de métodos no falle ya que las llamadas son todas diferentes

Probalo y contanos!

0voto

Emanuel Costi comentado

Lo solucioné cambiando el nombre del parámtero "queryParam" a otro nombre... debe ser que ese lo tiene reservado para otro uso...

0voto

Leonardo-Tadei comentado

Hola Emanuel,

Gracias por compartir la solución! Por favor, ponela como una respuestas y marcala como solucionada, así el tema que da cerrado.

Saludos!

2 Respuestas

1voto

jonatancastro1 Puntos3110

Prueba agregándole:

[ActionName("acción_metodo")]
public IHttpActionResult Get(string queryParam = "", string AmAdmin = "")
{
          ...
}

a cada una de los métodos.

Como tienes el WebApiConfig?

0voto

Emanuel Costi Puntos180

Al parecer el nombre del parámetro queryParam está reservado y no lo toma, cambiando el nombre del parámetro se resolvió mi problema. Gracias a la comunidad!

0voto

Peter comentado

Si esta es la solución, por favor seleccionala como correcta.

Gracias.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta