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)
{
??
}
}
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
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;
}
}
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.
HttpContext.Current.User.Identity.Name
C'est ce dont tu as besoin
string username = filterContext.HttpContext.User.Identity.Name;