firste firste - 3 months ago 117
C# Question

How to get the current ASP.NET core controller method name inside the controller using Reflection or another accurate method

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.

Answer

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 name

UPDATE: (thanks to Jim Aho)

Recent versions work with -

ControllerContext.ActionDescriptor.ActionName