Je veux obtenir le nom de méthode actuel de mon contrôleur ASP.NET Core
J'ai essayé d'obtenir le nom de la méthode par réflexion:
[HttpGet]
public async Task<IActionResult> CreateProcess(int catId)
{
string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
mais cela me donne une valeur de MoveNext
et non CreateProcess
Prenez note que je ne veux pas utiliser le ViewContext
string methodName = ActionContext.RouteData.Values["action"].ToString();
comme je minuscule mes urls via les paramètres de démarrage. Ce qui précède va me donner createprocess
au lieu de CreateProcess
Je préfère de préférence une méthode simple à une ligne et non une méthode d’extension multiligne.
Vous pouvez utiliser le fait que ce n'est pas n'importe quelle méthode mais un contrôleur et utiliser la propriété ActionContext.ActionDescriptor.Name
pour obtenir le nom de l'action
MISE À JOUR: (merci à Jim Aho)
Les versions récentes fonctionnent avec -
ControllerContext.ActionDescriptor.ActionName
Dans ASP.NET Core, cela semble avoir changé et vous devez utiliser la propriété ActionName
.
((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)ViewContext.ActionDescriptor).ActionName;
L'attribut CallerMemberName C # 5.0 peut faire l'affaire. (Je n'ai pas testé cela à partir d'une méthode asynchrone; cela fonctionne à partir d'un appel normal)
private static string GetCallerMemberName([CallerMemberName]string name = "")
{
return name;
}
Puis appelez-le depuis votre code:
[HttpGet]
public async Task<IActionResult> CreateProcess(int catId)
{
string methodName = GetCallerMemberName();
Notez que vous n'avez rien besoin de transmettre à la méthode.
Utilisez la classe Stack Trace et ses GetFrames jusqu'à ce que vous trouviez celui que vous voulez.
Vous pouvez l'obtenir par base.ControllerContext.ActionDescriptor.ActionName
Cela fonctionne dans .NET Core 1.0.