ASP.NET中实现获取调用方法名
2023-06-13 09:15:31 时间
本文实例讲述了ASP.NET中实现获取调用方法名的技巧。分享给大家供大家参考。具体实现方法如下:
在写记录日志功能时,需要记录日志调用方所在的模块名、命名空间名、类名以及方法名,想到使用的是反射(涉及到反射请注意性能),但具体是哪一块儿还不了解,于是搜索,整理如下:
需要添加相应的命名空间:
usingSystem.Diagnostics;
usingSystem.Reflection;
如果仅是获取当前方法名,可以使用如下代码:
{
MethodBasemb=MethodBase.GetCurrentMethod();
stringsystemModule=Environment.NewLine;
systemModule+="模块名:"+mb.Module.ToString()+Environment.NewLine;
systemModule+="命名空间名:"+mb.ReflectedType.Namespace+Environment.NewLine;
//完全限定名,包括命名空间
systemModule+="类名:"+mb.ReflectedType.FullName+Environment.NewLine;
systemModule+="方法名:"+mb.Name;
Console.WriteLine("LogDate:{0}{1}Level:{2}{1}systemModule:{3}{1}content:{4}",DateTime.Now,Environment.NewLine,level,systemModule,content);
Console.WriteLine();
}
但一般情况下是获取此记录日志方法的调用方,因此需要使用下面的代码:(此方法仅为演示)
{
constintlevel=1000;
StackTracess=newStackTrace(true);
//index:0为本身的方法;1为调用方法;2为其上上层,依次类推
MethodBasemb=ss.GetFrame(1).GetMethod();
StackFrame[]sfs=ss.GetFrames();
stringsystemModule=Environment.NewLine;
systemModule+="模块名:"+mb.Module.ToString()+Environment.NewLine;
systemModule+="命名空间名:"+mb.DeclaringType.Namespace+Environment.NewLine;
//仅有类名
systemModule+="类名:"+mb.DeclaringType.Name+Environment.NewLine;
systemModule+="方法名:"+mb.Name;
Console.WriteLine("LogDate:{0}{1}Level:{2}{1}systemModule:{3}{1}content:{4}",DateTime.Now,Environment.NewLine,level,systemModule,content);
Console.WriteLine();
}
对于这一点儿,感觉有意思的是Main的调用方
通过
StackFrame[]sfs=ss.GetFrames();
可以得知.NET程序的执行顺序:
System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext,ContextCallbackcallback,Objectstate)
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
System.AppDomain._nExecuteAssembly(Assemblyassembly,String[]args)
然后进入方法Main中。
另外,从MethodBase类还可以获取很多其他属性,可以自行定位到System.Reflection.MethodBase查看。
使用反射可以遍历获得类的所有属性名,方法名,成员名,其中一个有趣的小例子:通过反射将变量值转为变量名本身。
希望本文所述对大家的asp.net程序设计有所帮助。
相关文章
- ASP.Net中menu控件使用「建议收藏」
- Net不再压着 MSSql,语音变得前景无限(net mssql语音)
- 应用使用Linux环境部署.Net应用程序(linux部署.net)
- 使用NET来连接MySQL数据库的简单方法(.net怎么连mysql)
- Asp.net中处理一个站点不同Web应用共享Session的问题
- asp.net获取SQL所有数据库名、所有表名、所有字段名
- asp.net“服务器应用程序不可用”解决方法
- asp.net获取机器硬件信息(cpu频率、磁盘可用空间、内存容量等)
- asp.net(C#)动态添加非ASP的标准html控件(如添加Script标签)
- asp.net删除,更新数据库方法
- asp.net通过js实现Cookie创建以及清除Cookie数组的代码
- asp.net更改gridviewpageSize的方法
- asp.net数据类型转换类代码
- 修改服务器配置让asp.net文件后缀名随心所欲
- asp.net生成Excel并导出下载五种实现方法
- .Net中导出数据到Excel(asp.net和winform程序中)
- 浅谈ASP.NET的include的使用方法
- asp.net连接查询SQL数据库并把结果显示在网页上(2种方法)
- ASP.NET中用js取CheckBoxList中值的方法实例
- ASP.NET中TextBox使用Ajax控件显示日期不全的问题解决方法
- KindEditor图片上传的Asp.net代码实例
- asp.net中Table生成Excel表格的方法
- asp.net+ajax的Post请求实例
- 实现Asp与Asp.Net共享Session的方法
- ASP.NET批量操作基于原生html标签的无序列表的三种方法