Los parámetros son soportados directamente en MVC simplemente agregando parámetros en sus métodos de acción. Dada una acción como la siguiente:
public ActionResult GetImages(string artistName, string apiKey)
MVC se rellenará automáticamente los parámetros cuando se le da una URL como:
/Artist/GetImages/?artistName=cher&apiKey=XXX
Un caso especial adicional es parámetros con nombre "id". Cualquier ID de parámetro con nombre se puede poner en el camino en lugar de la cadena de consulta, así que algo como:
public ActionResult GetImages(string id, string apiKey)
serían ocupados correctamente con una URL como la siguiente:
/Artist/GetImages/cher?apiKey=XXX
Además, si usted tiene escenarios más complicados, puede personalizar las reglas de enrutamiento que utiliza MVC para ubicar una acción. Su archivo global.asax contiene reglas de enrutamiento que se pueden personalizar. Por defecto, la regla es el siguiente:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Si quieres apoyar una URL como
/Artist/GetImages/cher/api-key
se podría añadir una ruta como:
routes.MapRoute(
"ArtistImages", // Route name
"{controller}/{action}/{artistName}/{apikey}", // URL with parameters
new { controller = "Home", action = "Index", artistName = "", apikey = "" } // Parameter defaults
);
y un método como el primer ejemplo de arriba
Estoy trabajando con .N ET 4 y MVC. Solo puedo pasar un parámetro en la ruta. Esta URL {controller}/{action}/{artistName}/{apikey} no se correlaciona con 2 parámetros, sino que simplemente desencadena un error 404. Por lo que puedo decir, solo puedes pasar 1 parámetro en la ruta. ¿Qué estoy haciendo mal? – DavidHyogo
@DavidHyogo - Estaba experimentando el mismo problema. Por alguna razón, aunque especifiqué la acción predeterminada, tuve que poner realmente la acción que quería en mi enlace html, no solo el controlador y los parámetros. – Shaggy13spe
@DavidHyogo: tuve el mismo problema y descubrí que los parámetros de la plantilla de ruta deben coincidir exactamente con los nombres de los parámetros del método de acción, p. Ej. para la ruta definida como {controller}/{action}/{artistName}/{apikey} el método de acción debe tener la firma public ActionResult MyMethod (string artistName, string apikey) – dotnetguy