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


    在开发MVC项目中遇到的问题,做权限控制时,通过MVC的过滤器来实现,所以在分配权限时希望获取到所有的控制器和Action方法,通过查找资料,参考了《Asp.Net MVC框架揭秘》,最终实现。

    在C#中,实现动态获取类和方法主要通过反射来实现,要引用System.Reflection。

    public ActionResult GetControllerAndAction()
          List<Type> controllerTypes = new List<Type>();    //创建控制器类型列表
       var assembly = Assembly.Load("MySoft.UI");    //加载程序集
       controllerTypes.AddRange(assembly.GetTypes().Where(type => typeof(IController).IsAssignableFrom(type) && type.Name!="ErrorController"));    //获取程序集下所有的类,通过Linq筛选继承IController类的所有类型
       StringBuilder jsonBuilder = new StringBuilder();    //创建动态字符串,拼接json数据    注:现在json类型传递数据比较流行,比xml简洁
       jsonBuilder.Append("[");
       foreach (var controller in controllerTypes)//遍历控制器类
       {
           jsonBuilder.Append("{"controllerName":"");
          jsonBuilder.Append(controller.Name);
           jsonBuilder.Append("","controllerDesc":"");
           jsonBuilder.Append((controller.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute)==null?"" : (controller.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute).Description);    //获取对控制器的描述Description
           jsonBuilder.Append("","action":[");
           var actions = controller.GetMethods().Where(method => method.ReturnType.Name == "ActionResult");    //获取控制器下所有返回类型为ActionResult的方法,对MVC的权限控制只要限制所以的前后台交互请求就行,统一为ActionResult
           foreach (var action in actions)
           {
               jsonBuilder.Append("{"actionName":"");
               jsonBuilder.Append(action.Name);
               jsonBuilder.Append("","actionDesc":"");
               jsonBuilder.Append((action.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute) == null ? "" : (action.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute).Description);    //获取对Action的描述
               jsonBuilder.Append(""},");
           }
           jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
           jsonBuilder.Append("]},");
       }
       jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
       jsonBuilder.Append("]");
           return Content(jsonBuilder.ToString(),"json/text");t"); 
    作者:Aleen Pan
    出处:http://panxiangfu.cnblogs.com/
    如果您觉得本文对您的学习有所帮助,可通过“微信”或“支付宝”打赏博主,或者点击页面右下角【好文要顶】支持博主。
  • 相关阅读:
    LeetCode 453 Minimum Moves to Equal Array Elements
    LeetCode 112 Path Sum
    LeetCode 437 Path Sum III
    LeetCode 263 Ugly Number
    Solutions and Summay for Linked List Naive and Easy Questions
    AWS–Sysops notes
    Linked List
    All About Linked List
    datatable fix error–Invalid JSON response
    [转]反编译c#的相关问题
  • 原文地址:https://www.cnblogs.com/panxiangfu/p/5541103.html
Copyright © 2020-2023  润新知