我创建了一个简单的AspNet项目(.net框架(,成功登录后我进入了主页。
如果我单击"你好 mail@mail.it!"按钮,我可以访问管理方法并获取我当前的User.Identity.Name(这将是我 mail@mail.it(,因为我的用户管理器和登录管理器已填充。 相反,如果我尝试访问 ApiController 中的另一种方法并检索 User.Identity.Name, 用户管理器和登录管理器为空,我的名字为空。
那是我的 API 控制器:
namespace NameSpace.Controllers.API
{
public class LoginController : ApiController
{
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
public LoginController()
{
}
public LoginController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
{
UserManager = userManager;
SignInManager = signInManager;
}
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ?? HttpContext.Current.Request.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
[HttpGet]
public HttpResponseMessage Check()
{
var username = User.Identity.Name;
if(username != null){
return Request.CreateResponse(HttpStatusCode.OK, username );
}
}
}
}
我是否缺少某些内容,或者还有另一个需要查找当前用户的内容?
你能尝试使用以下方法吗?
if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
{
string username = System.Web.HttpContext.Current.User.Identity.Name;
}
更新:
请尝试以下操作以获取 HTTP 上下文:
// get httpContext here
object httpContext;
actionContext.Request.Properties.TryGetValue("MS_HttpContext", out httpContext);