Подтвердить что ты не робот

Получить имя пользователя в действии

Я использую веб-приложение MVC4 с веб-API. Я хочу создать фильтр действий, и я хочу знать, какой пользователь (зарегистрированный пользователь) сделал действие. Как я могу это сделать?

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

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
       ??
    }
}
4b9b3361

Ответ 1

Вы можете попробовать

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

Сначала проверьте подлинность пользователя:

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

Попробуйте использовать

HttpContext.Current.User.Identity.Name

Надеюсь, что это сработает для вас.

Ответ 2

Бит поздно для ответа, но это лучшее решение, если вы используете HttpActionContext в своем фильтре. Вы всегда можете использовать его, как указано здесь: -

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

Ответ 3

Возможно, это не самое подходящее решение, но для Web API ActionFilter вы можете сделать следующее:

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

Конечно, это применимо только в том случае, если ваши контроллеры действительно наследуются от ApiController.

Ответ 4

Это то, что вам нужно

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

Ответ 5

 HttpContext.Current.User.Identity.Name