提问



我已经下载了,并从此处成功运行了ASP.NET Identity示例:
https://github.com/rustd/AspnetIdentitySample[22]


我现在正在我的项目中实现ASP.NET Identity框架,并遇到了一个问题,这让我整天都疯了......



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



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


我尝试在我的控制器中实现与直接相同的代码,并找到相同的问题。


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


杀死我的代码块是:


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;


......这让我起了墙......任何想法?


更新


我查看了Identity&的版本样本中的OWIN,我确保在我的解决方案中有相同的版本。


更重要的是,如果我在GetOwinContext的样本上搜索对象浏览器,我可以找到该方法,但是当我在我的解决方案中搜索它时,无处可寻......我必须有一些过时的库,但我找不到它!

最佳参考


哎呀!


我找到了 ...我没有额外的包裹,称为Microsoft.Owin.Host.SystemWeb


一旦我搜索并安装了它,它就有效了。


现在 - 我不确定我是否只是错过了所有内容,但在浏览各种教程时发现没有参考这样的库或包。当我安装所有这个Identity框架时它也没有安装......不确定它是否只是我...


修改
虽然它在Microsoft.Owin.Host.SystemWeb程序集中,但它是System.Web命名空间中的扩展方法,所以你需要引用前者,并且using是后者。

其它参考1


我相信如果你在控制器之外,你需要参考当前的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程序集的一部分。

其它参考2


在尝试和错误比较我的控制器和Asp.Net模板控制器的using语句之后


using System.Web;


解决了我的问题。
您还需要添加:


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


使用GetUserManager方法。


微软无法通过右键单击自动解决此问题,并像其他缺少使用语句一样解决?

其它参考3


在我的情况下,通过nuget添加 Microsoft.AspNet.WebApi.Owin 引用做了一个技巧。

其它参考4


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

其它参考5


我拥有所有正确的包装和使用,但在我GetOwinContext()工作之前必须先建造。

其它参考6


在API中获取UserManager


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


其中AppUserManager是继承自UserManager的类。

其它参考7


只是用



  HttpContext.Current.GetOwinContext()



在我的情况下做了伎俩。