MVC4 WebアプリケーションとWeb APIを使用しています。アクションフィルターを作成し、どのユーザー(ログインユーザー)がアクションを行ったかを知りたい。どうすればできますか?
public class ModelActionLog : ActionFilterAttribute
{
public override void OnActionExecuting(SHttpActionContext actionContext)
{
string username = ??
}
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
??
}
}
あなたが試すことができます
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
それがあなたのために働くことを願っています
答えに少し遅れましたが、これはフィルタでHttpActionContextを使用している場合の最良の解決策です。ここで説明したようにいつでも使用できます:
public override Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
if (actionContext.RequestContext.Principal.Identity.IsAuthenticated)
{
var userName = actionContext.RequestContext.Principal.Identity.Name;
}
}
おそらく最もきれいなソリューションではありませんが、Web API ActionFilterの場合、次のことができます。
var controller = (actionContext.ControllerContext.Controller as ApiController);
var principal = controller.User;
もちろん、これはコントローラーが実際にApiControllerを継承する場合にのみ適用されます。
HttpContext.Current.User.Identity.Name
これはあなたが必要なものです
string username = filterContext.HttpContext.User.Identity.Name;