ApiController中的UserManager

时间:2014-05-10 08:59:41

标签: asp.net-web-api asp.net-identity

在我的项目中 HttpContext 是Controller的成员,我可以在 AccountController:Controller 中使用它。但我无法在收缩中访问 ApiController 中有关当前用户的信息,如

public class AccountController : ApiController
{
    public UserManager<ApplicationUser> UserManager { get; private set; }
    private IAuthenticationManager AuthenticationManager
    {
        get
        {
            return HttpContext.Current.GetOwinContext().Authentication;
        }
    }
}

那么如何正确编写自定义ApiController?

在下面的方法中, user 变量在断点上显示null。如果我知道hi已登录,我该如何检索当前用户?

    public IHttpActionResult GetUser(int id)
    {
        var manager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
        var userid = User.Identity.GetUserId();
        var user = manager.FindById(userid);

        var data = new Person {Name = user.UserName, Age = 99};

        return Ok(data);
    }

3 个答案:

答案 0 :(得分:0)

在任何控制器方法中,您都可以执行此操作.GetRequestContext()。用户获取当前经过身份验证的用户。 WebApi不支持静态HttpContext.Current。

答案 1 :(得分:0)

manager.FindById(userid)从数据库中检索用户而不是当前用户。要获取当前用户,只需访问ApiController中的User属性:

public class MyApiController : ApiController
{
    IPrincipal GetCurrentUser(){
        return User;
    }
}

答案 2 :(得分:0)

这可能会对您有所帮助:

 var userIdentity=await user.GenerateUserIdentityAsync(UserManager);

AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, userIdentity);