【发布时间】:2015-10-31 09:23:36
【问题描述】:
我意识到这个问题对某些人来说可能看起来微不足道,但正是这些类型的事情让我发现自己经常与之抗争,我只是想弄清楚这一切,尽管在 .net 中这似乎是一场失败的战斗(反正对我来说)。
所以,如果我执行以下操作:
using System.Web;
...
ApplicationUser user = System.Web.HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.User.Identity.GetUserId());
这会在标题中产生错误和红色GetOwinContext() 以及错误无法解析符号'GetOwinContext()'
但是,如果我执行以下操作(从 HttpContext 前面删除 System.Web),它会按预期工作(或至少没有错误):
using System.Web;
...
ApplicationUser user = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.User.Identity.GetUserId());
但是,如果我这样做(与 using System.Web 一起使用的同一行注释掉了):
//using System.Web;
...
ApplicationUser user = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.User.Identity.GetUserId());
它产生相同的红色GetOwinContext() 和错误无法解析符号'GetOwinContext()'
如果我googleHttpContext我只能发现它源于System.Web。
那么,问题是为什么我不能使用上面第一个示例中的完整语法? (这里的答案中也提到了最高票数:ASP.NET MVC 5 - Identity. How to get current ApplicationUser)
更新(解决重复的问题回复):虽然该问题的答案可能得出相同的结论,但我真的不明白这是一个重复的问题。尝试从新手的角度来思考它,并剖析 .Net 的所有烟雾和镜子。在我的生活中,我从来没有尝试过学习像 .Net 这样复杂的东西,有时你必须从许多不同的角度来看待事物。
我实际上看到了这个问题和另一个关于使用Current, 的问题,但两者都没有让我觉得 1) 是我(当时)正在寻找的答案 2) 更重要的是,为什么它会这样。山姆的回答是完美的,虽然有点过头了。但是,至少现在,我可以去研究这一切意味着什么……
【问题讨论】:
-
据我所见,控制器有自己的 HttpContext
Controller.HttpContext并且有一个System.Web.HttpContextController.HttpContext 有 GetOwinContext() .. 两者都有会话,但想想他们是一样的:) -
我将此归咎于naming conventions,我个人从不喜欢将属性命名为与类型相同的属性。如果不清楚,第三个问题也源于缺少扩展名(请参阅上面的@NightOwl888 链接)
标签: asp.net asp.net-mvc visual-studio