C#擷取類以及類下的方法(用於Asp.Net MVC)

來源:互聯網
上載者:User

標籤:

  在開發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個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.