Получить имя пользователя в действии
Я использую веб-приложение MVC4 с веб-API. Я хочу создать фильтр действий, и я хочу знать, какой пользователь (зарегистрированный пользователь) сделал действие. Как я могу это сделать?
public class ModelActionLog : ActionFilterAttribute
{
public override void OnActionExecuting(SHttpActionContext actionContext)
{
string username = ??
}
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
??
}
}
Ответы
Ответ 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