Acceso a la lista de controladores/acciones en una aplicación ASP.NET MVC
-
16-09-2019 - |
Pregunta
Sabemos que detrás de escena, el marco ASP.NET MVC utilizará la reflexión para determinar qué controladores/acciones están disponibles para ejecutarse, en función de qué clases se derivan de System.Web.Mvc.Controller
y, de esas clases, que los métodos devuelven un ActionResult
objeto.
A mi pregunta: ¿es posible acceder a esta lista de controladores/acciones desde mi aplicación MVC?
(Podría hacerlo yo mismo, usando la reflexión en el ensamblaje actual, pero si la lista ya ha sido construida por ASP.NET MVC, prefiero reutilizar ese esfuerzo que reinventar la rueda yo mismo).
Solución
new ReflectedControllerDescriptor(typeof(TController)).GetCanonicalActions()
Devolverá una colección de objetos de ActionDescriptor que muestran todas las acciones en el controlador. No es lo suficientemente inteligente como para comprender cosas como los atributos de selección o los atributos de nombres, por lo que no todas las acciones que devuelven se garantiza que se puede calentar en la web. Pero si necesita ejecutar las acciones directamente, puede llamar a ActionDescriptor.execute () sobre cualquier acción de interés para usted.
Otros consejos
This is done in an internal
class in the System.Web.Mvc
assembly called System.Web.Mvc.ControllerTypeCache
.
By the way, action methods are not required to return ActionResult
. They can return void
happily, for instance.