C# 通过反射获取MVC Controller里的类名,方法名,参数列表,返回值类型,Description描述,自定义Attribute
需要反射的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"); } } }
分类:
.Net
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架