本文实例讲述了ASP.NET中实现获取调用方法名的技巧。分享给大家供大家参考。具体实现方法如下:
在写记录日志功能时,需要记录日志调用方所在的模块名、命名空间名、类名以及方法名,想到使用的是反射(涉及到反射请注意性能),但具体是哪一块儿还不了解,于是搜索,整理如下:
需要添加相应的命名空间:
using System; using System.Diagnostics; using System.Reflection;
public static void WriteSysLog(int level, string content) { MethodBase mb = MethodBase.GetCurrentMethod(); string systemModule = 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(); }
但一般情况下是获取此记录日志方法的调用方,因此需要使用下面的代码:(此方法仅为演示)
public static void WriteSysLog(string content) { const int level = 1000; StackTrace ss = new StackTrace(true); //index:0为本身的方法;1为调用方法;2为其上上层,依次类推 MethodBase mb = ss.GetFrame(1).GetMethod(); StackFrame[] sfs = ss.GetFrames(); string systemModule = 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的调用方
System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
StackTrace ss = new StackTrace(true); StackFrame[] sfs = ss.GetFrames();
System.Threading.ThreadHelper.ThreadStart() System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
另外,从 MethodBase 类 还可以获取很多其他属性,可以自行定位到System.Reflection.MethodBase 查看。
使用反射可以遍历获得类的所有属性名,方法名,成员名,其中一个有趣的小例子:通过反射将变量值转为变量名本身。
本文向大家介绍asp.net获取真实ip的方法,包括了asp.net获取真实ip的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了asp.net获取真实ip的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的asp.net程序设计有所帮助。
问题内容: 我想得到调用方法。 不是 方法的名称。 这是一个如何获取调用方类的示例。 仅用于测试目的! 问题答案: 如果仅用于测试,则可能有效。它假定可以通过调用类的类访问类文件,并且类文件已使用调试符号进行编译(我希望它们用于测试!)。此代码依赖于ASM字节码库。
本文向大家介绍asp.net编程获取项目根目录实现方法集合,包括了asp.net编程获取项目根目录实现方法集合的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了asp.net编程获取项目根目录实现方法。分享给大家供大家参考,具体如下: 编写程序的时候,经常需要用的项目根目录。自己总结如下 1、取得控制台应用程序的根目录方法 方法1、Environment.CurrentDirectory 取
我是的新手,并编写了以下代码以从组中获取参数。 跳过:testMethodA java.lang.NullPoInterException(位于org.testng.internal.methodInvocationHelper.InvokedDataProvider(MethodInvocationHelper.java:151)(位于org.testng.internal.parameters
本文向大家介绍ASP.NET抓取网页内容的实现方法,包括了ASP.NET抓取网页内容的实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ASP.NET抓取网页内容的实现方法。分享给大家供大家参考。具体实现方法如下: 一、ASP.NET 使用HttpWebRequest抓取网页内容 二、ASP.NET 使用 WebResponse 抓取网页内容 希望本文所述对大家的C#程序设计有所帮助
本文向大家介绍ASP.NET中如何实现回调,包括了ASP.NET中如何实现回调的使用技巧和注意事项,需要的朋友参考一下 一、引言 在ASp.NET网页的默认模型中,用户通过单击按钮或其他操作的方式来提交页面,此时客户端将当前页面表单中的所有数据(包括一些自动生成的隐藏域)都提交到服务器端,服务器将重新实例化一个当前页面类的实例来响应这个请求,然后将整个页面的内容重新发送到客户端。这种处理方式对运行