ActionExecutingContext의 인스턴스가있는 경우 질문에서 작업의 MethodInfo를 어떻게 얻을 수 있습니까?ActionExecutingContext에서 MethodInfo를 얻으려면 어떻게해야합니까?
답변
ActionExecutingContext에는 ActionDescriptor 속성이 있습니다.
의 경우 반환 유형은 실제로 ReflectedActionDescriptor이므로 캐스팅 할 수 있어야합니다. 당신이 ReflectedActionDescriptor이 있으면 ...
http://msdn.microsoft.com/en-us/library/system.web.mvc.reflectedactiondescriptor.aspx
... 당신이 작업의 이름을 기술을 사용하여
http://msdn.microsoft.com/en-us/library/system.web.mvc.reflectedactiondescriptor.methodinfo.aspx
당신은 조심해야한다 ... 그것은 MethodInfo 속성의 사용 및 이것을 사용하여 MethodInfo를 얻습니다. 많은 경우 액션의 이름은 컨트롤러의 메소드 이름과 같지만 항상 그런 것은 아닙니다. 컨트롤러 메서드에서 ActionName 특성을 사용하면 명시 적으로 동작의 이름을 설정할 수 있습니다. 또한 동일한 액션 이름을 사용하여 서명이 다른 두 개의 메소드를 가질 수 있습니다. 이는 GET 및 POST 버전의 동일한 작업 (예 : AccountController.cs 내의 새로운 ASP.NET MVC 프로젝트에 Register 및 LogOn 작업이 있음)이있는 경우에 일반적으로 발생합니다.시도 Controller.GetType.GetMethod(actionExecutingContext.ActionName)
.
코드가 조치에 직접 관련된 경우 MethodBase.GetCurrentMethod()
으로 전화 할 수도 있습니다.
GetMethod 솔루션은 동일한 이름을 가진 여러 메서드가있는 곳에서 어떻게 작동합니까? 예를 들어 LogOn 또는 Register에 두 개의 오버로드가 발생합니다 (POST 및 다른 GET을 수락하는 서버). 또한 ActionName 속성을 사용하여 액션 이름을 메소드 이름과 매우 다르게 만들 수 있습니다. –
그렇지 않습니다. 당신의 대답은 훨씬 낫습니다. – SLaks
일부 로깅 목적으로 MethodInfo
에 내 사용자 지정 특성을 가져와야했습니다.
이 특정 사례에 대해 (적어도 MVC5에서) ActionDescriptor.GetCustomAttributes
메서드가 존재하며 각 ActionDescroptor
자손에 대해 올바르게 재정의되었음을 확인했습니다.
- 1. ActionExecutingContext에서 시작 포트 가져 오기?
- 2. ThreadContext 클래스에서 MethodInfo를 얻는 방법?
- 3. TrackPopupMenu에서 니모닉을 얻으려면 어떻게해야합니까?
- 4. CPU 사용법을 얻으려면 어떻게해야합니까?
- 5. 파일에서 CGImageRef를 얻으려면 어떻게해야합니까?
- 6. 조치 이름을 얻으려면 어떻게해야합니까?
- 7. 정규식을 올바르게 얻으려면 어떻게해야합니까?
- 8. 프로세스 추적을 얻으려면 어떻게해야합니까?
- 9. json에서 값을 얻으려면 어떻게해야합니까?
- 10. UINavigationBar에서 '매트'색상을 얻으려면 어떻게해야합니까?
- 11. 트랙바 값을 얻으려면 어떻게해야합니까?
- 12. UINavigationController에서 컨트롤러를 얻으려면 어떻게해야합니까?
- 13. XDocument에서 NameTable을 얻으려면 어떻게해야합니까?
- 14. 이름에서 선택자를 얻으려면 어떻게해야합니까?
- 15. Nokogiri에서이 값을 얻으려면 어떻게해야합니까?
- 16. $ .getjson에서 데이터를 얻으려면 어떻게해야합니까?
- 17. XML 속성을 얻으려면 어떻게해야합니까?
- 18. HttpSessionListener에서 HttpServletRequest를 얻으려면 어떻게해야합니까?
- 19. DynamicControl의 가치를 얻으려면 어떻게해야합니까?
- 20. 링크에서 이름을 얻으려면 어떻게해야합니까?
- 21. UITestControl에서 ItemStatus를 얻으려면 어떻게해야합니까?
- 22. CGContextRef에서 UIImage를 얻으려면 어떻게해야합니까?
- 23. 도시 목록을 얻으려면 어떻게해야합니까?
- 24. C로 주소를 얻으려면 어떻게해야합니까?
- 25. MemberInfo 값을 얻으려면 어떻게해야합니까?
- 26. 페이지없이 NavigationService를 얻으려면 어떻게해야합니까?
- 27. 주말없이 DateTime.DaysInMonth을 얻으려면 어떻게해야합니까?
- 28. 디스크의 ID를 얻으려면 어떻게해야합니까?
- 29. UIPickerView에서 텍스트를 얻으려면 어떻게해야합니까?
- 30. 일반 methodInfo를 호출 할 수있는 방법이 있습니까?
자체'ActionDescriptor' 상속 다른 종류가없는 MVC 프레임 워크
GetParameters
같은 다른 종래의 방법이있다. – SLaks실제로. 따라서 항상 ReflectedActionDescriptor를 얻어야하며 내 접근 방식이 효과적입니다. 나는 "if"라는 단어를 MVC의 차기 버전에 대한 보험으로 사용하고 ActionDescriptor를 전달하는 코드가이 가능성을 염두에두고 작성되어야한다고 제안했다. –
저는 이것이 매우 오래된 것임을 알고 있습니다 만, Task/Async 작업 방법이 있다면 ReflectedActionDescription이 아니라 TaskAsyncActionDescription입니다. 이로 인해 문제가 발생할 수 있습니다. –