Reputation: 7532
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.
Upvotes: 23
Views: 26884
Reputation: 91
modifying dfmetro above solutions works for me
((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)ViewContext.ActionDescriptor).ControllerName;
use .ControllerName to get the controller name.
not enough reputation to comment that's why i make i post.
Upvotes: 0
Reputation: 11957
You can get it by base.ControllerContext.ActionDescriptor.ActionName
This works in .NET Core 1.0.
Upvotes: 0
Reputation: 1254
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
Upvotes: 26
Reputation: 4592
In ASP.NET Core it seems to have changed and you have to use the ActionName
property
((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)ViewContext.ActionDescriptor).ActionName;
Upvotes: 14
Reputation: 41
The C# 5.0 CallerMemberName attribute may do the trick. (I haven't tested this from an async method; it works from a regular call)
private static string GetCallerMemberName([CallerMemberName]string name = "")
{
return name;
}
Then call it from your code:
[HttpGet]
public async Task<IActionResult> CreateProcess(int catId)
{
string methodName = GetCallerMemberName();
Note that you don't need to pass anything to the method.
Upvotes: 4
Reputation: 14555
Use the StackTrace class snd its GetFrames until you find the one you want.
Upvotes: 0