Я начал с шаблона по умолчанию для ASP.net в VS2013. Я хочу получить текущий пользовательский объект. Это должно быть возможно без прямого доступа к базе данных.
В документации это выглядит очень просто: 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?
ADDED
В менеджере пользователя FindById
не найден, но найдено this.FindById
. Я добавлю скриншоты. Это не правильное решение, потому что я не понимаю, почему это происходит, или кто-нибудь может объяснить это поведение? Я прикрепляю 2 экрана с открытым intellisense. Я также хочу упомянуть, что это не проблема intellisense - код не компилируется, если я не добавляю this.
Intellisense входит в "Fi":
.
Intellisense входит в "this.Fi":
Таким образом, по крайней мере, я больше не зацикливаюсь.