Comment obtenir de l'actuel ASP.NET contrôleur de base nom de la méthode à l'intérieur du contrôleur en utilisant la Réflexion ou une autre méthode précise
Je veux obtenir la méthode actuelle nom de mon ASP.NET Core
contrôleur
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 pas CreateProcess
Prendre note que je ne veux pas utiliser le ViewContext
string methodName = ActionContext.RouteData.Values["action"].ToString();
comme je l'ai minuscules mon url via les paramètres de démarrage.Le ci-dessus va me faire createprocess
au lieu de CreateProcess
De préférence, je veux un simple one-liner et pas d'une multiligne méthode d'extension.
OriginalL'auteur devfric | 2016-02-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le fait qu'il n'est pas une méthode mais un contrôleur et de l'utilisation
ActionContext.ActionDescriptor.Name
propriété afin d'obtenir le nom de l'actionMise à JOUR: (merci à Jim Aho)
Les versions récentes de travail -
quelle est la version de l'asp .net vous utilisez?
ASP.NET Core 1.0
et vous obtenez une erreur ou une exception? J'ai vérifié et utilisé avec succès il
Je ne peux même pas écrire ce bout de code sans avoir une erreur de compilation.
ActionContext
est une classe, et non pas un propery lorsque vous essayez d'accéder à l'intérieur d'une action.OriginalL'auteur Felix Av
Dans ASP.NET de Base, il semble avoir changé, et vous devez utiliser le
ActionName
propriétéOriginalL'auteur dfmetro
Le C# 5.0 CallerMemberName attribut peut faire l'affaire.
(Je n'ai pas testé à partir d'une méthode asynchrone; il fonctionne à partir d'un appel normal)
Ensuite appeler à partir de votre code:
Notez que vous n'avez pas besoin de passer quelque chose à la méthode.
OriginalL'auteur andyw
Utiliser le StackTrace classe snd son GetFrames jusqu'à ce que vous trouviez celui que vous voulez.
OriginalL'auteur Ricardo Peres
Vous pouvez l'obtenir en
base.ControllerContext.ActionDescriptor.ActionName
Cela fonctionne .NET Core 1.0.
OriginalL'auteur Jim Aho