I want to get the current method name of my ASP.NET Core
controller
I have tried getting the method name through reflection:
[HttpGet]
public async Task<IActionResult> CreateProcess(int catId)
{
string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
but this gives me a value of MoveNext
and not CreateProcess
Take note I don't want to use the ViewContext
string methodName = ActionContext.RouteData.Values["action"].ToString();
as I lowercase my urls via the startup settings.The above will get me createprocess
instead of CreateProcess
I preferably want an easy one-liner and not a multiline extension method.
Use the StackTrace class snd its GetFrames until you find the one you want.
In ASP.NET Core it seems to have changed and you have to use the
ActionName
propertyThe C# 5.0 CallerMemberName attribute may do the trick. (I haven't tested this from an async method; it works from a regular call)
Then call it from your code:
Note that you don't need to pass anything to the method.
You can get it by
base.ControllerContext.ActionDescriptor.ActionName
This works in .NET Core 1.0.
You can use the fact that it is not just any method but a controller and use
ActionContext.ActionDescriptor.Name
property to get the action nameUPDATE: (thanks to Jim Aho)
Recent versions work with -