• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#获取类以及类下的方法(用于Asp.NetMVC)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  在开发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);    //获取对控制器的描述Description
13           jsonBuilder.Append("\",\"action\":[");
14           var actions = controller.GetMethods().Where(method => method.ReturnType.Name == "ActionResult");    //获取控制器下所有返回类型为ActionResult的方法,对MVC的权限控制只要限制所以的前后台交互请求就行,统一为ActionResult
15           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"); 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap