2014-05-10 34 views
0

在我的項目HttpContext是Controller的成員,我可以在AccountController:Controller中使用它。但我不能訪問有關當前用戶在ApiController在收縮一樣ApiController中的UserManager

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

那麼如何編寫自定義ApiController吧?

在下面的方法中用戶變量在斷點上顯示爲空。如果我知道嗨登錄了,如何檢索當前用戶?

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

從任何控制器方法中,您可以執行this.GetRequestContext()。用戶可以獲取當前通過身份驗證的用戶。 WebApi不支持靜態HttpContext.Current。

+0

嗨。什麼是完整的方法? – Buratino

+0

對不起,但IntelySence不會在ApiController子項中顯示任何GetRequestContext()方法。 – Buratino

+0

另外,爲什麼** var identity = User.Identity.Name; **的結果是NULL? – Buratino

0

manager.FindById(userid)從數據庫中檢索用戶,而不是當前。爲了獲得當前用戶,只需訪問用戶屬性您ApiController內:

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

這可能會幫助您:

protected string UserId { get { return User.Identity.GetUserId(); } }