我刚刚切换到使用Identity 2.0的新2.0版本.在1.0中我可以使用获取用户对象manager.FindByIdAsync(User.Identity.GetUserId()).该GetUserId()方法似乎不存在于2.0中.
现在我可以弄清楚的是使用manager.FindByEmailAsync(User.Identity.Name)哪些引用users表中的用户名字段.在我的应用程序中,它设置为与电子邮件字段相同.
当有人需要更新他们的电子邮件时,我可以看到这会导致问题.有没有办法根据Identity 2.0 Framework中不变的值(例如id字段)获取当前登录的用户对象?
我意识到这个问题对某些人来说可能看起来微不足道,但是这些类型的东西让我发现自己很多时候都在战斗,我只是想弄清楚这一切尽管在.net中看起来像是一场失败的战斗(无论如何对我来说) ).
所以,如果我做以下事情:
using System.Web;
...
ApplicationUser user = System.Web.HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.User.Identity.GetUserId());
Run Code Online (Sandbox Code Playgroud)
这会产生标题中的错误和红色GetOwinContext()和错误无法解析符号'GetOwinContext()'
但是,如果我执行以下操作(System.Web从前面删除HttpContext),它按预期工作(或至少没有错误):
using System.Web;
...
ApplicationUser user = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.User.Identity.GetUserId());
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做(使用using System.Web注释掉的同一行):
//using System.Web;
...
ApplicationUser user = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.User.Identity.GetUserId());
Run Code Online (Sandbox Code Playgroud)
它产生相同的红色GetOwinContext()和错误无法解析符号'GetOwinContext()'
如果我谷歌HttpContext我只能发现它源于System.Web.
所以,问题是为什么我不能像上面第一个例子那样使用完整的语法?(在答案中也提到了最高票数:ASP.NET MVC 5 - Identity.如何获取当前的ApplicationUser)
更新(以解决重复的问题回复):虽然对该问题的答案可能得出相同的结论,但我真的不明白这是一个重复的问题.试着从新手的角度来思考它并解析所有的烟雾和镜子.Net.我从来没有尝试过像生活中那样令人费解的东西.有时你必须从许多不同的角度看问题.
我实际上看到了这个问题以及另一个关于使用的问题Current,但是没有让我感到震惊1)作为我正在寻找的答案(当时)2)更重要的是,为什么它表现得那样.Sam的答案很完美,虽然有点过头了.但是,至少现在,我可以去研究这一切意味着什么......
我从Web服务器获取视频长度值作为滴答.我想以"hh:mm:ss"格式显示它.我怎样才能在JavaScript中执行此操作?
我从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());
Run Code Online (Sandbox Code Playgroud)
但是缺少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;
}
}
Run Code Online (Sandbox Code Playgroud)
调用的属性:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激!要么向我展示FindById已经消失或如何使我的代码工作.或者是否有另一种加载IdentityUser的方法?
添加
在用户管理器中,FindById找不到,但是this.FindById …
我正在尝试创建一个使用 Windows Identity 和 Entity Framework Code First 的应用程序。所以我正在创建一个自定义类来保存一些数据。
public class Order {
public string Name { get; set; }
public DateTime CreatedDate { get; set; }
public IdentityUser User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试将用户表链接到订单表(由实体框架生成)。这样我就可以执行 Order.User 来获取创建订单的用户的用户信息。
我想使用创建一个新订单
new Order {
Name = "Test",
CreatedDate = new DateTime(2014, 3, 30),
User = <What goes here?>
}
Run Code Online (Sandbox Code Playgroud)
现在如何获取当前登录用户的“IdentityUser”?或者我以错误的方式处理这个问题?
entity-framework asp.net-identity entity-framework-migrations
asp.net ×3
c# ×2
asp.net-mvc ×1
entity-framework-migrations ×1
html ×1
javascript ×1
time ×1
webforms ×1