在我的项目中 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);
}
答案 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);