2009-12-29 49 views

回答

9

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操作),這是很常見的。

+0

MVC框架本身沒有其他類型的繼承'ActionDescriptor'。 – SLaks 2009-12-29 00:20:16

+0

確實。所以,你應該總是得到一個ReflectedActionDescriptor,並且我的方法將會起作用。我使用「if」這個詞作爲將來版本的MVC的保險,並且建議在編寫ActionDescriptor的代碼時應該考慮到這種可能性。 – 2009-12-29 00:33:33

+0

我知道這很舊,但是如果您有任務/異步操作方法,那麼它不是ReflectedActionDescription,而是TaskAsyncActionDescription。這可能會導致問題。 – 2015-11-18 15:29:29

1

嘗試​​。

如果您的代碼是直接在操作中,您還可以致電MethodBase.GetCurrentMethod()

+1

GetMethod解決方案如何在具有多個名稱相同的方法的情況下工作?例如,兩個重載LogOn或Register(一個接受POST和另一個GET)。此外,可以使用ActionName屬性來使該操作的名稱與方法名稱非常不同。 – 2009-12-29 13:02:12

+2

它不會。你的答案好多了。 – SLaks 2009-12-29 14:31:52

1

我需要獲取MethodInfo以獲取我的自定義屬性,用於某些日誌記錄目的。

對於這個特定的用例,我注意到(至少在MVC5中)存在一個ActionDescriptor.GetCustomAttributes方法,並且對於每個ActionDescroptor後代它都被正確覆蓋。

同樣,也有其他相關的方法,如GetParameters

相關問題