当前位置: 首页 > 编程笔记 >

ASP.NET中实现获取调用方法名

曹和正
2023-03-14
本文向大家介绍ASP.NET中实现获取调用方法名,包括了ASP.NET中实现获取调用方法名的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了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();

可以得知.NET程序的执行顺序:
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)

然后进入方法Main中。

另外,从 MethodBase 类 还可以获取很多其他属性,可以自行定位到System.Reflection.MethodBase 查看。
 
使用反射可以遍历获得类的所有属性名,方法名,成员名,其中一个有趣的小例子:通过反射将变量值转为变量名本身。

希望本文所述对大家的asp.net程序设计有所帮助。

 类似资料:
  • 本文向大家介绍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网页的默认模型中,用户通过单击按钮或其他操作的方式来提交页面,此时客户端将当前页面表单中的所有数据(包括一些自动生成的隐藏域)都提交到服务器端,服务器将重新实例化一个当前页面类的实例来响应这个请求,然后将整个页面的内容重新发送到客户端。这种处理方式对运行