gpt4 book ai didi

c# - 如何在执行时获取自定义属性附加到的函数/操作名称?

转载 作者:太空狗 更新时间:2023-10-30 00:30:51 25 4
gpt4 key购买 nike

理想情况下,我想创建一个继承自 ActionFilterAttribute 的过滤器,我可以在 Global.asax 中应用它,它会为我的应用程序中的所有操作创建性能计数器。这个问题很简单,但问题是我希望性能计数器在它们的名称中具有它们所附加的操作的方法签名。但是,我找不到一种方法来提取在构造期间附加属性的方法的方法名称。这导致我不得不将属性单独应用于每个操作,并将它们的签名作为参数传递。然而,这会带来明显的问题(即方法签名的更新不会自动与性能计数器命名同步)。

为了简化问题,如果我将属性附加到任何类型的方法,我可以访问它附加到的方法的名称/签名吗?我正在寻找一种通用解决方案,该解决方案也适用于并非从 ActionFilterAttribute 派生的属性。

public class SomeAttribute : ActionFilterAttribute
{
public string FunctionSignature { get; set; }

public SomeAttribute()
{
this.FunctionName = { HOW DO I GET THE NAME OF THE METHOD I'M ON WITHOUT PASSING IT IN AS AN INPUT ARGUMENT? }
}

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// Some code to update perf counter(s) with recorded time that will use string.Format("{0}: Avg. Time or Something", this.FunctionSignature).
}

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Some code to record time.
}
}

[SomeAttribute]
public void SomeMethod()
{
// Some code.
}

最佳答案

查找执行 Action 的名称:

var actionName = filterContext.ActionDescriptor.ActionName;

或者替代地

var actionName = filterContext.RouteData.Values["action"] as string

查找参数(名称、类型、默认值):

var parameters = filterContext.ActionDescriptor.GetParameters();

查找参数值:

 var value= filterContext.ActionParameters["parameterName"]; 

关于c# - 如何在执行时获取自定义属性附加到的函数/操作名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32530619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com