我从VS2013中使用默认的ASP.net模板开始。我想获取当前用户对象,这应该可以在不直接访问数据库的情况下实现。
在文档中,这看起来非常简单:http://blogs.msdn.com/b/webdev/archive/2013/10/16/customizing-profile-information-in-asp-net-identity-in-vs-2013-templates.aspx 所以它应该是:
调用属性(The calling property):
在文档中,这看起来非常简单:http://blogs.msdn.com/b/webdev/archive/2013/10/16/customizing-profile-information-in-asp-net-identity-in-vs-2013-templates.aspx 所以它应该是:
var currentUser = manager.FindById(User.Identity.GetUserId());
但是FindById方法不见了!几个小时以来,我一直在尝试使用FindByIdAsync代替。但我认为我遇到了死锁。
public class UserManager : UserManager<IdentityUser>
{
public UserManager()
: base(new UserStore<IdentityUser>(new ApplicationDbContext()))
{
}
public async System.Threading.Tasks.Task<IdentityUser> GetCurrentUser()
{
var user = await FindByIdAsync(HttpContext.Current.User.Identity.Name);
return user;
}
}
调用属性(The calling property):
private IdentityUser_CurrentUser;
protected IdentityUser CurrentUser
{
get
{
if (_CurrentUser == null)
{
var manager = new UserManager();
var result = manager.GetCurrentUser();
//-- STOPS HERE!!
_CurrentUser = result.Result;
}
return _CurrentUser;
}
}
任何帮助都将不胜感激!无论是告诉我FindById去哪了,还是如何让我的代码工作。或者有没有其他加载IdentityUser的方法?
补充
在用户管理器中,FindById未找到,但可以找到this.FindById。我会添加截图。这不是一个合适的解决方案,因为我不明白为什么会发生这种情况,有没有人能解释一下这种行为?我附上两个打开智能提示的屏幕截图。我还想提到的是,这不是智能提示的问题-如果我不加this.
,代码就无法编译。
输入“Fi”后智能提示的屏幕截图:
。
输入“this.Fi”后智能提示的屏幕截图:
这样至少我不再被卡住了。
class UserManager : UserManager<IdentityUser>
总是让我感到困惑。为什么不使用class MyUserManager : UserManager<IdentityUser>
? - tschmit007var manager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(context));
,然后使用FindByIdAsync?UserManager怎么可能知道HttpContext这样的东西? - tschmit007async
方法,当该方法使用await
时。 - tschmit007