Existe-t-il un moyen d'obtenir une liste de toutes les méthodes d'actions de mon projet MVC 3?MVC obtenir toutes les méthodes d'action
Répondre
Vous pouvez l'utiliser pour réfléchir sur les assemblées lors de l'exécution pour produire une liste des méthodes dans un contrôleur qui retournent ActionResult:
public IEnumerable<MethodInfo> GetMvcActionMethods()
{
return
Directory.GetFiles(Assembly.GetExecutingAssembly().Location)
.Select(Assembly.LoadFile)
.SelectMany(
assembly =>
assembly.GetTypes()
.Where(t => typeof (Controller).IsAssignableFrom(t))
.SelectMany(type => (from action in type.GetMethods(BindingFlags.Public | BindingFlags.Instance)
where action.ReturnType == typeof(ActionResult)
select action)
)
);
}
Cela vous donnera les actions, mais pas la liste des vues (il ne fonctionnera pas si vous pouvez utiliser différentes vues dans chaque action)
Cette méthode ne comprendra pas les méthodes d'action qui renvoient "FileContentResult", "JsonResult", ... Voir ma réponse ci-dessous – Moeri
Cela vous donnera un dictionnaire avec le type de contrôleur comme clé et un IEnumerable de sa valeur MethodInfos.
var assemblies = AppDomain.CurrentDomain.GetAssemblies(); // currently loaded assemblies
var controllerTypes = assemblies
.SelectMany(a => a.GetTypes())
.Where(t => t != null
&& t.IsPublic // public controllers only
&& t.Name.EndsWith("Controller", StringComparison.OrdinalIgnoreCase) // enfore naming convention
&& !t.IsAbstract // no abstract controllers
&& typeof(IController).IsAssignableFrom(t)); // should implement IController (happens automatically when you extend Controller)
var controllerMethods = controllerTypes.ToDictionary(
controllerType => controllerType,
controllerType => controllerType.GetMethods(BindingFlags.Public | BindingFlags.Instance).Where(m => typeof(ActionResult).IsAssignableFrom(m.ReturnType)));
Il semble plus que juste l'assemblée en cours et il sera également de retour des méthodes qui, par exemple, au lieu de JsonResult reviennent ActionResult. (JsonResult hérite en fait de ActionResult)
Edit: Pour le support de l'API Web
changement
&& typeof(IController).IsAssignableFrom(t)); // should implement IController (happens automatically when you extend Controller)
à
&& typeof(IHttpController).IsAssignableFrom(t)); // should implement IHttpController (happens automatically when you extend ApiController)
et supprimer ce:
.Where(m => typeof(ActionResult).IsAssignableFrom(m.ReturnType))
Be Les méthodes de l'API Web peuvent renvoyer à peu près n'importe quoi. (POCO, HttpResponseMessage, ...)
+1 pour une méthode qui retourne plus de détails (j'aime comment elle regroupe les 'Actions' avec leurs 'respectifs' Controllers ') – JakeJ
Dans le cas de webapi ce code obtient beaucoup de méthodes redondantes - constructeurs, toutes les propriétés publiques (héritées de ApiController), etc. Méthode plus précise décrite ici: http://stackoverflow.com/questions/28069206/how-can- i-get-la-liste-de-toutes-les-actions-de-apicontroller – LbISS
- 1. Obtenir toutes les méthodes de l'application AC
- 2. Comment puis-je obtenir toutes les méthodes dans un protocole?
- 3. Obtenir toutes les variables locales ou méthodes disponibles de irb?
- 4. Obtenir toutes les méthodes sur un type [] d'interfaces utilisant LINQ?
- 5. Puis-je obtenir toutes les méthodes d'une classe?
- 6. Obtenir toutes les méthodes dans un fichier script
- 7. Array.each sorties toutes les méthodes
- 8. ASP.NET MVC: Comment obtenir toutes les vues disponibles?
- 9. Telerik MVC TreeView obtenir toutes les valeurs de nœud vérifiées
- 10. Décorer toutes les méthodes d'une classe
- 11. Stubbing toutes les méthodes d'une classe groovy?
- 12. Suivre toutes les méthodes et classes
- 13. Éviter d'annoter toutes les méthodes avec @ResponseBody
- 14. ASP .NET MVC Sécuriser toutes les ressources
- 15. obtenir toutes les notifications
- 16. MembershipProvider et RoleProvider - Dois-je implémenter toutes les méthodes requises?
- 17. Comment lister toutes les méthodes d'un objet dans ActionScript 3?
- 18. Polymorphisme dans les méthodes d'action MVC
- 19. appel entre les méthodes Ambigu ASP.NET MVC
- 20. Comment obtenir toutes les méthodes d'une classe et les stocker dans un fichier Utilisation de DXCore?
- 21. Réflexion Java: Comment puis-je obtenir toutes les méthodes getter d'une classe Java et les invoquer?
- 22. Obtenir toutes les méthodes publiques et attribuer getters et les transmettre à liquid_methods
- 23. Fournir des données communes à toutes les méthodes de contrôleur ASP.NET MVC 4
- 24. MVC Meilleures pratiques lorsque toutes les méthodes proviennent d'un service Web
- 25. Comment voir toutes les méthodes disponibles sur un fichier svc?
- 26. Liste toutes les méthodes auxquelles un objet répond_to?
- 27. Obtenir toutes les valeurs d'énumération
- 28. httpwebrequest - Obtenir toutes les demandes
- 29. UltraGrid obtenir toutes les cellules
- 30. Obtenir toutes les combinaisons possibles
Lors de l'exécution ou dans VS? – Richard
Voulez-vous dire Actions ou Vues? Si vous voulez dire Vues, incluez-vous des vues partielles? Aussi quel viewengine? Si vous utilisez la valeur par défaut, vous pouvez utiliser la réflexion pour obtenir une liste de chaque classe de votre assembly/namespace qui hérite de System.Web.Mvc.ViewPage ou de ViewPage. Actions que vous pouvez faire le même genre de chose - utilisez la réflexion pour identifier toutes les classes héritées de Controller et toutes leurs méthodes publiques qui retournent une dérivée ActionResult. –
RichardW1001
Je veux les Actions dans VS –