net mvc example consumir asp c# asp.net-web-api action-filter

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