route net mvc httpget examples attribute asp c# asp.net-mvc model-view-controller routing url-routing

net - route controller c#



Enrutamiento MVC-Pregunta de nombres de parĂ¡metros (5)

Puedes construir las rutas como quieras

routes.MapRoute( "Default", "{controller}.mvc/{action}/{param1}/{param2}/{param3}" new { controller = "Default", action="Index", param1="", param2="", param3=""});

Además, mira esta publicación , contiene todo tipo de muestras en la sección de comentarios

Estoy buscando información sobre enrutamiento en MVC con C #. Actualmente soy muy consciente de los conceptos básicos de enrutamiento en MVC, pero lo que estoy buscando es algo difícil de encontrar.

Efectivamente, lo que quiero encontrar es una forma de definir una ruta única que tome un solo parámetro.

Los ejemplos comunes que he encontrado en línea se basan en el ejemplo

routes.MapRoute( "Default", "{controller}.mvc/{action}/{id}" new { controller = "Default", action="Index", id=""});

Al mapear esta ruta, puede asignar cualquier acción en cualquier controlador, pero si quiere pasar algo a la acción, el parámetro del método debe llamarse "id". Quiero encontrar una forma de evitar esto si es posible, para no tener que especificar rutas constantemente solo para usar un nombre de parámetro diferente en mis acciones.

¿Alguien tiene alguna idea, o ha encontrado una forma de evitar esto?


No creo que puedas hacer exactamente lo que estás preguntando. Cuando MVC invoca una acción, busca parámetros en las rutas, solicita parámetros y la cadena de consulta. Siempre busca coincidir con el nombre del parámetro.

Quizás una buena cadena de consulta antigua satisfaga sus necesidades.

~/mycontroller/myaction/?foobar=123

pasará 123 a esta acción:

public ActionResult MyAction(int? foobar)


Sé que esto es hace siglos, pero espero que todavía ayude a alguien. Hice la misma pregunta antes. Creo que esto es lo que estás buscando. Una respuesta citada de mi pregunta: "El bit {* pathInfo} se llama slug. Básicamente es un comodín que dice" todo después de que este punto se rellena en un parámetro llamado pathInfo ". Por lo tanto, si tiene" {resource} .axd / {* pathInfo} "y una url como esta: http://blah/foo.axd/foo/bar/baz/bing se http://blah/foo.axd/foo/bar/baz/bing dos parámetros, uno llamado resource, que contendría foo y otro llamado pathInfo que contiene foo / bar / baz / bing ".


Si desea tener un nombre de parámetro diferente y mantener la misma variable de enrutamiento, use el atributo FromUri de la siguiente manera:

public ActionResult MyView([FromUri(Name = "id")] string parameterThatMapsToId) { // do stuff }

En tus rutas, todo lo que necesitas es:

routes.MapRoute( "Default", "{controller}.mvc/{action}/{id}" new { controller = "Default", action="Index", id=""});


Aunque todavía no puede usar el atributo FromUri , puede usar el atributo Route , como tal

[Route("~/Policy/PriorAddressDelete/{sequence}")] public ActionResult PriorAddressDelete(int sequence) { Policy.RemoveScheduledPriorAddressItem(sequence); return RedirectToAction("Information", new { id = Policy.Id }); }

Técnicamente, esto agrega una nueva ruta, pero al menos no routeconfig su configuración de routeconfig . Pone la definición de ruta justo donde se usa, lo cual me gusta (menos buscar cosas).

Recuerde, para poder usar el enrutamiento de atributos, este debe estar en su archivo routeconfig sobre sus rutas definidas:

routes.MapMvcAttributeRoutes();