tag route net mvc custom attribute asp asp.net asp.net-mvc routing asp.net-routing

asp.net - route - routing in asp net mvc



¿Cómo lo resuelve asp.net mvc? (2)

¿Cómo es que puedo crear un método en el controlador y poner algunos argumentos y resolverlo luego de hacer clic en el envío de un formulario? Bajo el capó, ¿cómo encuentra el método correcto y cómo se da cuenta de que solo quiero esos argumentos?


En una palabra:

  1. El motor de enrutamiento maneja HttpRequest y verifica la URL solicitada. Cuando encuentra la primera coincidencia de ruta, crea una nueva instancia de MvcRouteHandler y le pasa los tokens fragmentados de la URL en un RouteValueDictionary.

  2. El MvcRouteHandler la ruta toma la solicitud e intenta crear una instancia de clase de controlador. Por convención, busca una clase llamada "XXXXXXController", donde las X se reemplazan por el parámetro {controller} en la ruta.

  3. Una vez que encuentra el controlador, invoca el método apropiado en él, dado por el parámetro {acción} de la ruta. Cualquier argumento con nombre, como {id}, que exista en la ruta, se pasa como parámetros al método.

Básicamente, todo lo que ASP.Net MVC "conoce" proviene de la información de la ruta. No puede adivinar los parámetros desde el aire: deben provenir del análisis de la ruta. Si la información no está presente en la URL solicitada, no se puede pasar al método.

También se debe tener en cuenta que puede anular el comportamiento del marco al hacer que sus rutas utilicen controladores alternativos en lugar de MvcRouteHandler . El marco es bastante extensible, por lo que puede conectar funcionalidad personalizada en muchos puntos.


Hay bastante código en juego para el controlador, la acción y la resolución de la vista, así como los ModelBinders. Tanto que probablemente sea mejor para usted buscar partes específicas del marco y hacer una pregunta más detallada para obtener una buena respuesta.

Afortunadamente, el marco ASP.NET MVC ha sido de código abierto , por lo que si tiene curiosidad sobre cómo funciona todo, puede obtener el código y revisarlo usted mismo. Es un código excelente para leer y seguramente aprenderá algo.

Más al punto de su pregunta, sin embargo, debería mirar las clases System.Web.Mvc.MvcHandler y System.Web.Mvc.ControllerActionInvoker, que deberían guiarlo por el camino correcto para responder sus preguntas.