Доступ к списку контроллеров / действий в приложении ASP.NET MVC - PullRequest
9 голосов
/ 26 апреля 2009

Мы знаем, что за кулисами платформа ASP.NET MVC будет использовать отражение, чтобы определить, какие контроллеры / действия доступны для выполнения, основываясь на том, какие классы являются производными от System.Web.Mvc.Controller, и из этих классов, какие методы возвращают ActionResult объект.

На мой вопрос - возможно ли получить доступ к этому списку контроллеров / действий из моего приложения MVC?

(Я мог бы сделать это сам, используя отражение в текущей сборке, но если бы этот список уже был создан ASP.NET MVC, я бы предпочел повторно использовать это усилие, чем заново изобретать колесо самостоятельно.)

Ответы [ 2 ]

15 голосов
/ 27 апреля 2009

new ReflectedControllerDescriptor(typeof(TController)).GetCanonicalActions() вернет коллекцию объектов ActionDescriptor, показывающую все действия на контроллере. Он недостаточно умен, чтобы понимать такие вещи, как атрибуты выбора или атрибуты именования, поэтому не каждое возвращаемое действие гарантированно будет доступно для вызова через Интернет. Но если вам нужно выполнить действия напрямую, вы можете вызвать ActionDescriptor.Execute () для любого интересующего вас действия.

6 голосов
/ 26 апреля 2009

Это делается в классе internal в сборке System.Web.Mvc с именем System.Web.Mvc.ControllerTypeCache.

Кстати, методы действия не обязаны возвращать ActionResult. Например, они могут вернуться void счастливо.

...