C# 通过反射获取MVC Controller里的类名,方法名,参数列表,返回值类型,Description描述,自定义Attribute
2013-08-12 14:18
1031 查看
需要反射的DLL里的一个类:
namespace ElegantWM.WebUI.Areas.Admin.Controllers { [Description("功能模块管理")] public class ModuleController : BaseController { [Action] [Description("根据系统编号,获取系统的功能模块")] [HttpGet] public string Get(Guid sysId) { ... return json; } [Action] [Description("新建功能模块")] [HttpPost] public JsonResult Create(WMS_Module module) { ... } [Action] [Description("修改功能模块")] [HttpPut] public JsonResult Update(WMS_Module module) { ... } [Action] [Description("删除功能模块")] [HttpDelete] public JsonResult Delete(WMS_Module module) { ... } } }
反射代码:
Assembly assembly = Assembly.LoadFrom(@"ElegantWM.WebUI.dll"); var types = assembly.GetTypes(); foreach (var type in types) { if (type.BaseType.Name == "BaseController")//如果是Controller { var members = type.GetMethods(); foreach (var member in members) { //获取HTTPAttribute IEnumerable<Attribute> atts = member.GetCustomAttributes(); bool isAction = false; foreach (Attribute a in atts) { if (a.GetType().Name == "Action" || a.GetType().Name == "Page") { richTextBox1.AppendText(a.GetType().Name + "\r\n"); isAction = true; } else if (a.ToString().Contains("System.Web.Mvc.Http")) { richTextBox1.AppendText(a.GetType().Name.Replace("Http", "").Replace("Attribute", "") + "\r\n"); } } if (!isAction) continue; //获取返回值 richTextBox1.AppendText(member.ReturnType.Name + "\r\n"); //获取方法说明 object[] attrs = member.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), true); if (attrs.Length > 0) richTextBox1.AppendText((attrs[0] as System.ComponentModel.DescriptionAttribute).Description + "\r\n"); //获取参数 ParameterInfo[] param = member.GetParameters(); StringBuilder sb = new StringBuilder(); foreach (ParameterInfo pm in param) { sb.Append(pm.ParameterType.Name + " " + pm.Name + ","); } richTextBox1.AppendText("(" + sb.ToString().Trim(',') + ")" + "\r\n"); //获取方法名称 richTextBox1.AppendText(member.Name + "\r\n"); //获取类名 richTextBox1.AppendText(member.DeclaringType.Name + "\r\n"); richTextBox1.AppendText("--------------------------\r\n"); } } }
相关文章推荐
- java通过反射+javassist获得方法所有信息(返回值、方法名、参数类型列表、参数列表)
- java再复习——通过反射获取到方法的参数和返回值的泛型类型
- 黑马程序员——通过反射获取方法中泛型参数的指定类型
- C#中通过反射方法获取控件类型和名称
- java 通过反射获取方法参数列表名称
- Java利用反射来获取一个方法的 范型化参数 Vector<Integer>的类型
- C#反射通过类名的字符串获取生成对应的实例
- Java反射,根据类名创建带参数的实例(获取参数类型,参数等)
- 通过反射获取泛型参数类型
- 一个简单的反射例子(通过类型或者类型参数获取类的名称)
- c#通过反射获取类上的自定义特性
- Gson通过借助TypeToken获取泛型参数的类型的方法(转)
- [No000085]C#反射Demo,通过类名(String)创建类实例,通过方法名(String)调用方法
- 枚举转中文,通过反射方法与描述的方式获取
- 获取注解,权限修饰符,返回值类型,方法名,形参列表,异常
- 利用反射获取方法的反回值类型和参数个数
- Java利用反射来获取一个方法的 范型化参数 Vector<Integer>的类型
- C#,动态加载DLL,通过反射,调用参数,方法,窗体
- Gson通过借助TypeToken获取泛型参数的类型的方法
- [C#] 通过重写 class 的 ToString() 来简化获取 enum 的 DescriptionAttribute 值