37

我使用带有 Web API 的 MVC4 Web 应用程序。我想创建一个操作过滤器,并且我想知道哪个用户(登录用户)进行了操作。我该怎么做?

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

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

5 回答 5

64

回答有点晚了,但如果您在过滤器中使用 HttpActionContext ,这是最好的解决方案 您可以始终按照此处所述使用它:-

public override Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
   if (actionContext.RequestContext.Principal.Identity.IsAuthenticated)
   {
      var userName = actionContext.RequestContext.Principal.Identity.Name;
   }
}
于 2015-05-28T13:12:00.533 回答
44

你可以试试

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

希望对你有帮助

于 2013-05-20T12:31:15.023 回答
4

也许不是最漂亮的解决方案,但对于 Web API ActionFilter,您可以执行以下操作:

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

当然,这只适用于你的控制器实际上是从 ApiController 继承的。

于 2014-05-24T23:43:46.427 回答
1

这就是你需要的

string username = filterContext.HttpContext.User.Identity.Name;
于 2013-05-20T12:52:37.047 回答
0
 HttpContext.Current.User.Identity.Name
于 2013-05-21T06:39:48.297 回答