如果我有一個ActionExecutingContext的實例,我該如何獲取有關 操作的MethodInfo?如何從ActionExecutingContext獲取MethodInfo?
回答
ActionExecutingContext有一個屬性ActionDescriptor。
如果返回類型實際上是一個ReflectedActionDescriptor,您應該可以投射出來。一旦你有一個ReflectedActionDescriptor ...
http://msdn.microsoft.com/en-us/library/system.web.mvc.reflectedactiondescriptor.aspx
...您可以使用它的MethodInfo的屬性...
http://msdn.microsoft.com/en-us/library/system.web.mvc.reflectedactiondescriptor.methodinfo.aspx
您應該謹慎使用採取動作的名稱,技術和使用它來獲得一個MethodInfo。在許多情況下,操作的名稱將與控制器上的方法名稱相同,但情況並非總是如此。如果在控制器的方法上使用ActionName屬性,則可以顯式設置操作的名稱。另外,可能有兩種方法具有不同的簽名,兩種方法都具有相同的操作名稱。當您有相同操作的GET和POST版本時(例如AccountController.cs中全新的ASP.NET MVC項目中存在Register和LogOn操作),這是很常見的。
嘗試。
如果您的代碼是直接在操作中,您還可以致電MethodBase.GetCurrentMethod()
。
GetMethod解決方案如何在具有多個名稱相同的方法的情況下工作?例如,兩個重載LogOn或Register(一個接受POST和另一個GET)。此外,可以使用ActionName屬性來使該操作的名稱與方法名稱非常不同。 – 2009-12-29 13:02:12
它不會。你的答案好多了。 – SLaks 2009-12-29 14:31:52
我需要獲取MethodInfo
以獲取我的自定義屬性,用於某些日誌記錄目的。
對於這個特定的用例,我注意到(至少在MVC5中)存在一個ActionDescriptor.GetCustomAttributes
方法,並且對於每個ActionDescroptor
後代它都被正確覆蓋。
同樣,也有其他相關的方法,如GetParameters
等
- 1. 如何從ActionExecutingContext或AuthorizationContext獲取ActionDescriptor?
- 2. 如何從ActionExecutingContext獲取路由模板
- 3. ActionExecutingContext ActionDescriptor不包含ActionName和MethodInfo
- 4. 從methodinfo獲取委託
- 5. 從MethodInfo對象獲取AddressOf
- 6. 從ActionExecutingContext獲取區域名稱
- 7. 從ActionExecutingContext獲取始發端口?
- 8. 如何從封閉式的MethodInfo獲取MethodInfo的開放泛型類型
- 9. 如何在ThreadContext類中獲取MethodInfo?
- 10. 從MethodInfo獲取組裝路徑
- 11. 從方法引用獲取methodinfo C#
- 12. 提高從MethodCallExpression獲取MethodInfo的性能
- 13. 如何從方法符號中獲取MethodInfo
- 14. 如何從MethodInfo(C#)獲取對方法的引用
- 15. 如何從操作的MethodInfo獲取MVC操作信息?
- 16. 獲取MethodInfo的簽名
- 17. 從令牌獲取MethodInfo對象,或從令牌獲取Type對象
- 18. 如何獲得一般方法的MethodInfo?
- 19. 獲取擴展方法的MethodInfo
- 20. 獲取MethodInfo for ICollection <T>
- 21. 如何調用MethodInfo?
- 22. 如何爲重載的靜態方法獲取MethodInfo?
- 23. 如何爲「Where」擴展方法獲取正確的MethodInfo
- 24. 如何使用多種通用匹配方法獲取MethodInfo
- 25. 如何獲取Array.IndexOf <string>(string [],string)MethodInfo?
- 26. 我如何從MethodInfo訪問實例
- 27. 從SoapHttpClientProtocol生成的MethodInfo獲取底層WebResponse
- 28. 如何獲得接口方法的MethodInfo,實現類方法的MethodInfo?
- 29. 將從接口類型獲取的MethodInfo對象轉換爲C#中實現類型的相應MethodInfo對象?
- 30. HttpContext.Current VS ActionExecutingContext
MVC框架本身沒有其他類型的繼承'ActionDescriptor'。 – SLaks 2009-12-29 00:20:16
確實。所以,你應該總是得到一個ReflectedActionDescriptor,並且我的方法將會起作用。我使用「if」這個詞作爲將來版本的MVC的保險,並且建議在編寫ActionDescriptor的代碼時應該考慮到這種可能性。 – 2009-12-29 00:33:33
我知道這很舊,但是如果您有任務/異步操作方法,那麼它不是ReflectedActionDescription,而是TaskAsyncActionDescription。這可能會導致問題。 – 2015-11-18 15:29:29