如何使用Reflection或其他准确方法在控制器内获取当前的ASP.NET核心控制器方法名称

dev*_*ric 16 c# reflection asp.net-core-mvc asp.net-core

我想获取ASP.NET Core控制器的当前方法名称

我试过通过反射获取方法名称:

    [HttpGet]
    public async Task<IActionResult> CreateProcess(int catId)
    {
        string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
Run Code Online (Sandbox Code Playgroud)

但这给了我一个价值MoveNext而不是CreateProcess

请注意我不想使用ViewContext

string methodName = ActionContext.RouteData.Values["action"].ToString();
Run Code Online (Sandbox Code Playgroud)

因为我通过启动设置小写我的网址.以上将createprocess取代我CreateProcess

我最好想要一个简单的单行而不是多行扩展方法.

Fel*_* Av 21

您可以使用以下事实:它不仅仅是一个控制器而是使用ActionContext.ActionDescriptor.Name属性来获取操作名称

更新:(感谢Jim Aho)

最新版本适用于 -

ControllerContext.ActionDescriptor.ActionName
Run Code Online (Sandbox Code Playgroud)


dfm*_*tro 10

在ASP.NET Core中它似乎已经改变,你必须使用该ActionName属性

((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)ViewContext.ActionDescriptor).ActionName;
Run Code Online (Sandbox Code Playgroud)