首页 > 代码库 > C#获取类以及类下的方法(用于Asp.Net MVC)
C#获取类以及类下的方法(用于Asp.Net MVC)
在开发MVC项目中遇到的问题,做权限控制时,通过MVC的过滤器来实现,所以在分配权限时希望获取到所有的控制器和Action方法,通过查找资料,参考了《Asp.Net MVC框架揭秘》,最终实现。
在C#中,实现动态获取类和方法主要通过反射来实现,要引用System.Reflection。
1 public ActionResult GetControllerAndAction() 2 List<Type> controllerTypes = new List<Type>(); //创建控制器类型列表 3 var assembly = Assembly.Load("MySoft.UI"); //加载程序集 4 controllerTypes.AddRange(assembly.GetTypes().Where(type => typeof(IController).IsAssignableFrom(type) && type.Name!="ErrorController")); //获取程序集下所有的类,通过Linq筛选继承IController类的所有类型 5 StringBuilder jsonBuilder = new StringBuilder(); //创建动态字符串,拼接json数据 注:现在json类型传递数据比较流行,比xml简洁 6 jsonBuilder.Append("["); 7 foreach (var controller in controllerTypes)//遍历控制器类 8 { 9 jsonBuilder.Append("{\"controllerName\":\"");10 jsonBuilder.Append(controller.Name);11 jsonBuilder.Append("\",\"controllerDesc\":\"");12 jsonBuilder.Append((controller.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute)==null?"" : (controller.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute).Description); //获取对控制器的描述Description13 jsonBuilder.Append("\",\"action\":[");14 var actions = controller.GetMethods().Where(method => method.ReturnType.Name == "ActionResult"); //获取控制器下所有返回类型为ActionResult的方法,对MVC的权限控制只要限制所以的前后台交互请求就行,统一为ActionResult15 foreach (var action in actions)16 {17 jsonBuilder.Append("{\"actionName\":\"");18 jsonBuilder.Append(action.Name);19 jsonBuilder.Append("\",\"actionDesc\":\"");20 jsonBuilder.Append((action.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute) == null ? "" : (action.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute).Description); //获取对Action的描述21 jsonBuilder.Append("\"},");22 }23 jsonBuilder.Remove(jsonBuilder.Length - 1, 1);24 jsonBuilder.Append("]},");25 }26 jsonBuilder.Remove(jsonBuilder.Length - 1, 1);27 jsonBuilder.Append("]");28 return Content(jsonBuilder.ToString(),"json/text");t");
C#获取类以及类下的方法(用于Asp.Net MVC)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。