如何使用Reflection或其他准确方法获取控制器内的当前ASP.NET核心控制器方法名称
我想获取我的ASP.NET Core
控制器的当前方法名称
我试过通过reflection获取方法名称:
[HttpGet] public async Task CreateProcess(int catId) { string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
但这给了我一个MoveNext
的值,而不是CreateProcess
请注意我不想使用ViewContext
string methodName = ActionContext.RouteData.Values["action"].ToString();
因为我通过启动设置小写我的URL。上面将得到createprocess
而不是CreateProcess
我最好想要一个简单的单行而不是多行扩展方法。
您可以使用以下事实:它不仅仅是一个控制器,而是使用ActionContext.ActionDescriptor.Name
属性来获取操作名称
更新:(感谢Jim Aho)
最新版本适用于 –
ControllerContext.ActionDescriptor.ActionName
在ASP.NET Core中,它似乎已更改,您必须使用ActionName
属性
((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)ViewContext.ActionDescriptor).ActionName;
C#5.0 CallerMemberName属性可以解决问题。 (我没有从异步方法测试过它;它可以通过常规调用工作)
private static string GetCallerMemberName([CallerMemberName]string name = "") { return name; }
然后从你的代码中调用它:
[HttpGet] public async Task CreateProcess(int catId) { string methodName = GetCallerMemberName();
请注意,您无需向方法传递任何内容。
使用StackTrace类和它的GetFrames,直到找到你想要的那个。
您可以通过base.ControllerContext.ActionDescriptor.ActionName
获取它
这适用于.NET Core 1.0。