Si tengo una instancia de ActionExecutingContext, ¿cómo puedo obtener el MethodInfo de la acción en cuestión?¿Cómo obtengo un MethodInfo de ActionExecutingContext?
Respuesta
ActionExecutingContext tiene una propiedad ActionDescriptor.
Si el tipo de devolución es realmente un ReflectedActionDescriptor que debería poder lanzar es como tal. Una vez que tenga un ReflectedActionDescriptor ...
http://msdn.microsoft.com/en-us/library/system.web.mvc.reflectedactiondescriptor.aspx
... se puede usar la propiedad MethodInfo ...
http://msdn.microsoft.com/en-us/library/system.web.mvc.reflectedactiondescriptor.methodinfo.aspx
usted debe tener cuidado usando técnicas que toman el nombre de la acción y use esto para obtener un MethodInfo. En muchos casos, el nombre de una acción será el mismo que el nombre del método en el controlador, pero este no siempre será el caso. Si usa el atributo ActionName en el método del controlador, puede establecer explícitamente el nombre de la acción. Además, es posible tener 2 métodos con diferentes firmas, ambos con el mismo nombre de acción. Esto es común cuando tiene una versión GET y POST de la misma acción (por ejemplo, las acciones Register y LogOn presentes en un nuevo proyecto ASP.NET MVC dentro de AccountController.cs).
Probar Controller.GetType.GetMethod(actionExecutingContext.ActionName)
.
Si su código está directamente en la acción, también puede llamar al MethodBase.GetCurrentMethod()
.
¿Cómo funcionaría la solución GetMethod donde hay varios métodos con el mismo nombre? Por ejemplo, dos sobrecargas para Iniciar sesión o Registrarse (una que acepta POST y la otra GET). Además, es posible usar el atributo ActionName para hacer que el nombre de la acción sea muy diferente al nombre del método. –
No lo haría. Tu respuesta es mucho mejor – SLaks
Necesitaba obtener el MethodInfo
para recuperar mis atributos personalizados con fines de registro.
Para este caso de uso específico noté que (al menos en MVC5) existe un método ActionDescriptor.GetCustomAttributes
, y se anula correctamente para cada descendiente .
Del mismo modo, hay otros métodos relacionados, como GetParameters
, etc.
- 1. ExecuteCore() vs OnActionExecuting (ActionExecutingContext filterContext)?
- 2. Comprobación de un MethodInfo contra un delegado
- 3. Obtención de un delegado de methodinfo
- 4. Cómo puedo crear un MethodInfo desde un delegado de Acción
- 5. ¿Cómo puedo crear un delegado de acción desde MethodInfo?
- 6. Cómo obtener MethodInfo desde un símbolo de método
- 7. Método de invocación por MethodInfo
- 8. ¿Cómo obtener MethodInfo del método de interfaz, teniendo implementación MethodInfo of class method?
- 9. Creando delegado desde MethodInfo
- 10. Imprimir la firma completa de un método de un MethodInfo
- 11. Cómo determinar si MethodInfo reemplaza el método base
- 12. WCF: recuperación de MethodInfo from OperationContext
- 13. ¿Cómo obtengo un estilo calculado?
- 14. ¿Cómo obtener MethodInfo de un método genérico en un tipo .NET no genérico?
- 15. ¿Cómo obtengo un keyIterator para un LinkedHashMap?
- 16. MethodInfo Igualdad para declarar el tipo
- 17. ¿Cómo obtengo un selector de su nombre?
- 18. ¿Cómo obtengo UIImage de un CGContextRef?
- 19. ¿Cómo obtengo cada línea de un NSString?
- 20. ¿Cómo obtengo los suscriptores de un evento?
- 21. Cómo obtengo un volcado de emergencia
- 22. ¿Cómo obtengo una NameTable de un XDocument?
- 23. ¿Cómo obtengo una imagen de un UIButton?
- 24. forma optimizada para conseguir "get_Item" MethodInfo
- 25. Como llegar constructor como MethodInfo usando Reflexión
- 26. ¿Cómo obtengo los atributos personalizados de un método de Acción <T>?
- 27. Encontrar el alojamiento PropertyInfo desde el MethodInfo de getter/setter
- 28. Obteniendo el MethodInfo del método estático de una clase estática
- 29. Getting MethodInfo de métodos protegidos y públicos solamente?
- 30. MySQL - ¿Cómo obtengo SUMA de un COUNT de un campo?
El marco MVC sí no tiene ningún otro tipo que heredan 'ActionDescriptor'. – SLaks
De hecho. Por lo tanto, siempre debe obtener un ReflectedActionDescriptor y mi enfoque funcionará. Utilicé la palabra "si" como seguro para versiones futuras de MVC, y sugerir que el código para transmitir el ActionDescriptor se debe escribir teniendo en cuenta esta posibilidad. –
Sé que esto es muy antiguo, pero si tiene un método de acción Task/Async, entonces no es ReflectedActionDescription, sino TaskAsyncActionDescription. Esto podría causar problemas. –