web-dev-qa-db-fra.com

Obtenir le nom d'utilisateur sur le filtre d'action

J'utilise l'application Web MVC4 avec Web API. Je souhaite créer un filtre d'action et savoir quel utilisateur (utilisateur connecté) a effectué l'action. Comment puis-je le faire?

public class ModelActionLog : ActionFilterAttribute
{
    public override void OnActionExecuting(SHttpActionContext actionContext)
    {
       string username = ??
    }

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
       ??
    }
}
26
TamarG

Tu peux essayer

public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
           string username = HttpContext.Current.User.Identity.Name;
        }

Recherchez d'abord l'utilisateur authentifié:

string userName = null;
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
    userName = HttpContext.Current.User.Identity.Name;
}

Essayez d'utiliser

HttpContext.Current.User.Identity.Name

J'espère que ça marche pour toi

32
Rahul

Peu de retard pour une réponse, mais c'est la meilleure solution si vous utilisez HttpActionContext dans votre filtre. Vous pouvez toujours l'utiliser comme indiqué ici: -

public override Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
   if (actionContext.RequestContext.Principal.Identity.IsAuthenticated)
   {
      var userName = actionContext.RequestContext.Principal.Identity.Name;
   }
}
53
Atul Chaudhary

Peut-être pas la solution la plus jolie, mais pour Web API ActionFilter, vous pouvez effectuer les opérations suivantes:

var controller = (actionContext.ControllerContext.Controller as ApiController);
var principal = controller.User;

Bien entendu, cela ne s'applique que si vos contrôleurs héritent réellement d'ApiController.

1
 HttpContext.Current.User.Identity.Name
0
TamarG

C'est ce dont tu as besoin

string username = filterContext.HttpContext.User.Identity.Name;
0
YuriG