' System.Web.HttpContext'不包含' GetOwinContext'的定义神秘

时间:2015-08-07 20:25:03

标签: asp.net asp.net-mvc visual-studio

我意识到这个问题对某些人来说可能看起来微不足道,但是我发现自己要与这些类型的东西进行相当多的斗争,我只是想弄清楚这一切,尽管这似乎是一场失败的战斗在.net(无论如何)。

所以,如果我这样做:

    using System.Web;
...
ApplicationUser user = System.Web.HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.User.Identity.GetUserId());

这会在标题中产生错误并显示红色GetOwinContext(),错误 无法解析符号&#39; GetOwinContext()&#39; < / p>

但是,如果我执行以下操作(从System.Web前删除HttpContext),它会按预期工作(或至少没有错误):

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(),错误 无法解析符号&#39; GetOwinContext()&#39;

如果我谷歌HttpContext我只能发现它来自System.Web

所以,问题是为什么我不能使用上面第一个例子中的完整语法? (在答案中也提到最高票数:ASP.NET MVC 5 - Identity. How to get current ApplicationUser

更新(以解决重复的问题回复):虽然对该问题的答案可能得出相同的结论,但我并不真正理解这是一个重复的问题。试着从新手的角度来思考它并解析所有的烟雾和镜子.Net。我从来没有尝试过像生活中那样令人费解的东西。有时你必须从许多不同的角度看问题。

我实际上看到了这个问题以及另一个关于使用Current,的问题但是没有让我感到震惊1)作为我正在寻找的答案(当时)2)更重要的是,它为什么表现得像那。 Sam的答案很完美,虽然有点过头了。但是,至少现在,我可以研究这一切意味着什么...

4 个答案:

答案 0 :(得分:25)

当你写System.Web.HttpContext时实际上你指的是一个班级。但是当您在控制器内部编写HttpContext时,您正在使用名为HttpContext的属性,该属性返回HttpContext类的对象。您也可以通过调用System.Web.HttpContext.Current静态属性来访问同一个对象。因此你可以写:

System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();

答案 1 :(得分:9)

DSR在此链接中的回答对我有用

Working in MVC 5 Identity for email verification

您似乎缺少一个名为&#39; Microsoft.Owin.Host.SystemWeb&#39;的NuGet包。从NuGet安装此软件包或使用软件包管理器控制台安装所述软件包。

Install-Package Microsoft.Owin.Host.SystemWeb

希望这有帮助。

答案 2 :(得分:9)

只需转到项目的NuGet Packages Manager,搜索并安装此Microsoft.Owin.Host.SystemWeb即可使用using System.Web;启用GetOwinContext()方法

答案 3 :(得分:2)

由于 当我从Microsoft.Owin.Host.SystemWeb添加NugetpackageManager.时,它适用于我的情况 它为GetOwinContext()提供了扩展方法HttpContext