Yo uso MVC4 aplicación web con Web API. Quiero crear un filtro de acción, y quiero saber que usuario (un usuario que ha iniciado sesión) hizo 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)
    {
       ??
    }
}
InformationsquelleAutor TamarG | 2013-05-20

5 Comentarios

  1. 34

    Puede intentar

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

    De verificación para el usuario autenticado primero:

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

    Intentar utilizar

    HttpContext.Current.User.Identity.Name

    Espero que funcione para usted

    • 1. Quieres decir actionContext’, no ‘filterContext’, ¿verdad?
    • Yo uso WebAPI (del Sistema.Web.Http.Los filtros.ActionFilterAttribute), su solución no funciona
    • si u r uso de System.Web.Http.Filters.ActionFilterAttribute utilice sólo HttpContext.Current.User.Identity.Name para obtener Nombre de Usuario en Action Filter..ver mi respuesta actualizada,y de intentar al menos una vez.
    • Por favor, no sugieren utilizar HttpContext.Actual en WebApi. WebApi es asíncrona y en el caso de dos de solicitud de venir juntos, usted puede mezclar dos de solicitud de datos. Es migth parece funcionar, pero no es definitivamente seguro para subprocesos
    • De acuerdo a este stackoverflow.com/a/24973147/90033 si todo está correctamente configurado y en ejecución en/configurar .net 4.5 se debe trabajar
    • No es Comprobable porque de estática HttpContext de la propiedad. Por favor utilice actionContext.RequestContext lugar.

  2. 55

    Poco tarde para responder, pero esta es la mejor solución si usted está usando HttpActionContext en el filtro Se puede utilizar siempre que 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;
       }
    }
    • Esto también es seguro para subprocesos y creo aceptado la respuesta es no..
    • Sistema.Web.Http.Los controladores.HttpActionContext no tiene RequestContext.
    • es en el Sistema.Net.Http y el hombre que le ha pedido a este cuestionado menciona en uno de sus comentarios de que está utilizando el API Web
    • Usted necesita tener el paquete de nuget Microsoft.AspNet.WebApi.Core instalado en el fin de ver la RequestContext propiedad
    • Esta respuesta es por eso que siempre debe mirar más allá de la aceptación de la respuesta. +1
  3. 1

    Tal vez no la más bonita de la solución, pero para la API de Web ActionFilter puede hacer lo siguiente:

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

    Por supuesto, esto sólo se aplica si tus controladores en realidad heredar de ApiController.

  4. 0

    Esto es lo que usted necesita

    string username = filterContext.HttpContext.User.Identity.Name;
    • Recibo un mensaje – » del Sistema.Web.Http.Los controladores.HttpActionContext’ no contiene una definición para ‘HttpContext’, y ningún método de extensión ‘HttpContext’ aceptar un primer argumento de tipo ‘System.Web.Http.Los controladores.HttpActionContext’ podría ser encontrado (¿falta una directiva using o una referencia de ensamblado?)
    • Yo uso el Sistema.Web.Http.Los filtros.ActionFilterAttribute

Dejar respuesta

Please enter your comment!
Please enter your name here