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 > )
richTextBox1.AppendText((attrs[] 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"); }
}
}
C# 通过反射获取MVC Controller里的类名,方法名,参数列表,返回值类型,Description描述,自定义Attribute的更多相关文章
- c# 获取方法所在的命名空间 类名 方法名
平时我们在记录日志的时候难免会需要直接记录当前方法的路径,以便查找,但是每次都输入方法名称非常的繁琐,同时如果修改了方法名称也要去手动修改日志内容,真的是劳命伤财啊,所以有了如下方法则可解决我们的大难 ...
- C# 获取方法所在的 命名空间 类名 方法名
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- Asp.net MVC 中Controller返回值类型ActionResult
[Asp.net MVC中Controller返回值类型] 在mvc中所有的controller类都必须使用"Controller"后缀来命名并且对Action也有一定的要求: 必 ...
- C#反射 获取程序集信息和通过类名创建类实例(转载)
C#反射获取程序集信息和通过类名创建类实例 . System.Reflection 命名空间:包含通过检查托管代码中程序集.模块.成员.参数和其他实体的元数据来检索其相关信息的类型. Assembly ...
- C# 反射总结 获取 命名空间 类名 方法名
一.获取 命名空间 类名 方法名 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...
- java 反射获取方法返回值类型
//ProceedingJoinPoint pjp //获取方法返回值类型 Object[] args = pjp.getArgs(); Class<?>[] paramsCls = ne ...
- Spring MVC controller返回值类型
SpringMVC controller返回值类型: 1 String return "user":将请求转发到user.jsp(forword) return "red ...
- SpringMVC源码学习:容器初始化+MVC初始化+请求分发处理+参数解析+返回值解析+视图解析
目录 一.前言 二.初始化 1. 容器初始化 根容器查找的方法 容器创建的方法 加载配置文件信息 2. MVC的初始化 文件上传解析器 区域信息解析器 handler映射信息解析 3. Handler ...
- Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出
主要拦截前端或后天的请求,打印请求方法参数.返回值.耗时.异常的日志.方便开发调试,能很快定位到问题出现在哪个方法中. 前端请求拦截,mvc的拦截器 import java.util.Date; im ...
随机推荐
- wget for windows
那么,来尝试下wget for windows 吧. 什么是wget? wget是一个强力方便的命令行下的下载工具,可以通过HTTP和FTP协议(两种最广泛的互联网协议)从因特网中检索并获取文件. 此 ...
- java学习记录--ThreadLocal使用案例
本文借由并发环境下使用线程不安全的SimpleDateFormat优化案例,帮助大家理解ThreadLocal. 最近整理公司项目,发现不少写的比较糟糕的地方,比如下面这个: public class ...
- libsvm_readme[zz from github]
Libsvm is a simple, easy-to-use, and efficient software for SVM classification and regression. It so ...
- 滴滴passport设计之道:帐号体系高可用的7条经验
导读:应对高可用及极端峰值,每个技术团队都有自己的优秀经验,但是这些方法远没有得到体系化的讨论.高可用架构在 6 月 25 日举办了『高压下的架构演进』专题活动,进行了闭门私董会研讨及对外开放的四个专 ...
- OpenSSL证书生成及Mac上Apache服务器配置HTTPS(也适用centos)
自签名证书 配置Apache服务器SSL 自己作为CA签发证书 这里是OpenSSL和HTTPS的介绍OpenSSLHTTPS 开启HTTPS配置前提是已在Mac上搭建Apache服务器→Mac上Ap ...
- 使用memcache处理缓存的三种方案
这篇文章主要讨论的问题是:如何为项目设计一个完整而简洁的缓存系统.只讲做法,不讲原理.在我们项目中,使用到了三种方法,来保证了缓存系统的有效简洁. 1) 第一种,最常见的方式 读取数据的主要步骤如下: ...
- SQL Server 2008开启sa账户以及如何用JDBC进行连接
做实验需要用Java与SQL Server连接,因为使用的 SQL 2008 Express Edition 是基于 Visual Studio2010 安装包安装时一起安装的,所以为了方便数据库的操 ...
- 服务端 https和SSL
String keyStoreFilePassword = System .getProperty("keystore.file.password"); /usr/java/jdk ...
- Atitit vue.js 把ajax数据 绑定到form表单
Atitit vue.js 把ajax数据 绑定到form表单 1.1. 使用场景:主要应用在编辑与提交场合..1 1.2. 绑定数据到form控件,可以使用jquery,不过vue.js更加简单1 ...
- 【Unity】12.2 导航网格寻路简单示例
开发环境:Win10.Unity5.3.4.C#.VS2015 创建日期:2016-05-09 一.简介 本节通过一个简单例子,演示如何利用静态对象实现导航网格,并让某个动态物体利用导航网格自动寻路, ...