Estoy creando una aplicación en ASP.net donde cada usuario tendrá su propio perfil que podrá compartir con otros.

La dirección predeterminada para su perfil será:

www.domain.com/User/Profile/[UserID]

Cuando especifican una URL personalizada, alguien puede ingresar

www.domain.com/User/Profile/[Vanity]

Y ser dirigido a la misma página. La página de perfil funciona con una sola función que incluye un ID de usuario con la siguiente función en el controlador:

    public ActionResult Profile(int id)
    {
        ppUser viewerChoice = DB.User_GetUserByPersonID(id);

        return View(viewerChoice);
    }

Sin embargo, cuando agrego otro que toma una cuerda

    public ActionResult Profile(string vanity)
    {
        ppUser viewerChoice = DB.User_GetUserByVanity(vanity);

        return View(viewerChoice);
    }

Esto provoca una excepción AmbiguousMatch. ¿Cómo me aseguraría de que llame a la función correcta?

2
Alex 31 may. 2012 a las 17:36

1 respuesta

La mejor respuesta

Tienes pocas opciones.

  • Puede capturar solo el parámetro de cadena y leerlo y, si es un número, convertirlo a int.
  • Puede configurar 2 rutas separadas y usar expresiones regulares para reconocer el parámetro y procesarlo en consecuencia
  • Utilice acciones independientes para los parámetros int y string.

Sería muy cuidadoso con su enfoque (mismas acciones, diferentes parámetros) ya que existe el riesgo de que el usuario elija int (el mismo formato que la identificación del usuario) para una URL personalizada. ¿Cómo resolvería ese conflicto?

2
LukeP 31 may. 2012 a las 17:43
Apoyaré la idea de la ruta personalizada. Esa es una de las cosas en las que ASP.NET MVC sobresale.
 – 
Robaticus
31 may. 2012 a las 17:45
¿Al no permitir que el usuario use ints para URL personalizadas?
 – 
Pete
31 may. 2012 a las 17:46
Nunca dije que no fuera posible, pero se abordaron las necesidades.
 – 
LukeP
31 may. 2012 a las 17:53
Sé de dónde vienes. Solo estaba brindando una posible solución al problema que mencionaste.
 – 
Pete
31 may. 2012 a las 18:12