我从 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

所以应该是

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;
    }
}

调用属性:
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。我会添加截图。这不是一个正确的解决方案,因为我不明白为什么会发生这种情况,或者有人可以解释这种行为吗?我附加了 2 个打开智能感知的屏幕。我还想提一下,这不是智能感知的问题——如果我不添加 this.,代码就不会编译

智能感知输入“Fi”:

.

智能感知输入“this.Fi”:

这样,至少我不再被卡住了。

最佳答案

FindById 是来自 Microsoft.AspNet.Identity.UserManagerExtensions 类的扩展方法。它是 Microsoft.AspNet.Identity.Core nuget 包的一部分。

你应该添加

using Microsoft.AspNet.Identity;

到您的代码以开始使用非异步方法。

10-07 19:53