web-dev-qa-db-ja.com

アクションフィルターでユーザー名を取得する

MVC4 WebアプリケーションとWeb APIを使用しています。アクションフィルターを作成し、どのユーザー(ログインユーザー)がアクションを行ったかを知りたい。どうすればできますか?

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

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
       ??
    }
}
28
TamarG

あなたが試すことができます

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

それがあなたのために働くことを願っています

34
Rahul

答えに少し遅れましたが、これはフィルタでHttpActionContextを使用している場合の最良の解決策です。ここで説明したようにいつでも使用できます:

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

おそらく最もきれいなソリューションではありませんが、Web API ActionFilterの場合、次のことができます。

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

もちろん、これはコントローラーが実際にApiControllerを継承する場合にのみ適用されます。

1
 HttpContext.Current.User.Identity.Name
0
TamarG

これはあなたが必要なものです

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