ASP.NET身份 – HttpContext没有GetOwinContext的扩展方法

我已经下载并成功运行了以下的ASP.NET身份示例: https : //github.com/rustd/AspnetIdentitySample

我现在正在实施我的项目中的ASP.NET身份框架的中间,并遇到了一个问题,这一直使我疯狂的一整天…

GetOwinContext()不作为我的HttpContext上的扩展方法存在

我正在实现类库中的身份框架。 我已经安装了Identity框架的所有最新版本(预发行版本),除此之外,所有的工作都正常。

我已经尝试在我的控制器中执行相同的代码,并find相同的问题。

我明显错过了某处的参考,虽然我不知道是什么..!

正在杀死我的代码块是:

 private IAuthenticationManager AuthenticationManager { get { return HttpContext.GetOwinContext().Authentication; } } 

我已经添加了以下引用 – 在我的类库中也尝试过这些,并直接在控制器上,他们都没有为我工作…

 using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.Owin.Security; using Microsoft.Owin; using System.Web; 

…这是把我推上墙……任何想法?

UPDATE

我已经在示例中检查了Identity&OWIN的版本,并且确保我的解决scheme中具有相同的版本。

更重要的是,如果我searchGetOwinContext的示例上的对象浏览器,我可以find该方法,但是当我在我的解决scheme中search它时,无处可寻…我必须有一些库过时,但我可以找不到!

哎呀!

我发现它 …我没有一个额外的包,叫做Microsoft.Owin.Host.SystemWeb

一旦我search和安装这个,它的工作。

现在 – 我不确定我是否错过了所有的东西,虽然在阅读各种教程时发现没有提及这样的库或包。 它也没有得到安装时,我安装了所有这个身份框架…不知道是否只是我..

编辑尽pipe它在Microsoft.Owin.Host.SystemWeb程序集中,它是System.Web命名空间中的一个扩展方法,因此您需要引用前者,并using后者。

我相信你需要引用当前的HttpContext如果你在控制器之外。 MVC控制器具有对当前上下文的基本引用。 但是,除此之外,你必须明确声明你想要的是当前的HttpContext

 return HttpContext.Current.GetOwinContext().Authentication; 

至于它没有显示出来,使用上面显示的代码( IAuthenticationManager )的新MVC 5项目模板在帐户控制器的顶部有以下使用语句:

 using System.Threading.Tasks; using System.Web; using System.Web.Mvc; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.Owin.Security; using WebApplication2.Models; 

注释掉每一个,看来GetOwinContext()实际上是System.Web.Mvc程序集的一部分。

经过反复试验,比较了我的控制器和Asp.Net模板控制器的使用语句

 using System.Web; 

为我解决了这个问题。 您还需要添加:

 using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.Owin; 

使用GetUserManager方法。

微软无法find一种方法来自动解决这个问题,右键点击并解决像其他缺less使用语句?

在我的情况下通过nuget添加Microsoft.AspNet.WebApi.Owin refference有一个窍门。

确保你安装了nuget包Microsoft.AspNet.Identity.Owin 。 然后添加System.Net.Http命名空间。

我有所有正确的软件包和使用,但必须先build立,才能使GetOwinContext()工作。

在API中获取UserManager

 return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>(); 

AppUserManager是inheritance自UserManager的类。