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 に答える
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 に答える