c# - mvc - Obtener nombre de usuario en el filtro de acción
httpclient asp net web api (5)
Utilizo la aplicación web MVC4 con la API web. Quiero crear un filtro de acción, y quiero saber qué usuario (usuario que inició sesión) realizó la acción. ¿Cómo puedo hacerlo?
public class ModelActionLog : ActionFilterAttribute
{
public override void OnActionExecuting(SHttpActionContext actionContext)
{
string username = ??
}
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
??
}
}
Esto es lo que necesitas
string username = filterContext.HttpContext.User.Identity.Name;
Poco tarde para una respuesta, pero esta es la mejor solución si está utilizando HttpActionContext en su filtro. Siempre puede usarlo como se menciona aquí:
public override Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
if (actionContext.RequestContext.Principal.Identity.IsAuthenticated)
{
var userName = actionContext.RequestContext.Principal.Identity.Name;
}
}
Puedes probar
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
string username = HttpContext.Current.User.Identity.Name;
}
Compruebe primero el usuario autenticado:
string userName = null;
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
userName = HttpContext.Current.User.Identity.Name;
}
Tratar de usar
HttpContext.Current.User.Identity.Name
Espero que funcione para ti
Quizás no sea la solución más bonita, pero para Web API ActionFilter puede hacer lo siguiente:
var controller = (actionContext.ControllerContext.Controller as ApiController);
var principal = controller.User;
Por supuesto, esto solo se aplica si sus controladores realmente heredan de ApiController.
HttpContext.Current.User.Identity.Name