ASP.NET Identity - HttpContext has no extension method for GetOwinContext
我已从以下位置下载并成功运行了ASP.NET标识示例:https://github.com/rustd/aspnetidentitysample
我现在正在项目中实现ASP.NET标识框架,遇到了一个问题,这让我整天发疯……
GetOwinContext() does not exist as an extension method on myHttpContext
号
我正在类库中实现身份框架。我已经安装了身份框架的所有最新版本(预发布版本),除此之外,一切都正常工作。
我尝试在控制器中实现与同一个Direct相同的代码,并发现了相同的问题。
很明显,我在某个地方遗漏了一个参考资料,尽管我不知道是什么。我是说…
杀死我的代码块是:
1 2 3 4 5 6 7 | private IAuthenticationManager AuthenticationManager { get { return HttpContext.GetOwinContext().Authentication; } } |
我已经添加了对以下内容的引用-在我的类库中尝试了这两种方法,也直接在控制器上尝试了这两种方法,它们都不适合我……
1 2 3 4 5 | using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.Owin.Security; using Microsoft.Owin; using System.Web; |
号
……这把我逼疯了……知道吗?
更新
我在示例中检查了Identity&Owin的版本,并确保我的解决方案中有相同的版本。
更重要的是,如果我在示例的对象浏览器中搜索
啊!
我找到了它…我没有额外的包裹,叫
一旦我搜索并安装了这个,它就工作了。
现在-我不确定我是否错过了所有的东西,尽管在阅读各种教程时没有发现对这样一个库或包的引用。当我安装所有这些标识框架时,它也没有安装…不知道是不是只有我……
编辑虽然它在
如果您不在控制器范围内,我相信您需要参考当前的
1 | return HttpContext.Current.GetOwinContext().Authentication; |
至于没有显示,使用上面显示的代码的新MVC 5项目模板(
1 2 3 4 5 6 7 | 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; |
在评论每一个时,似乎
在比较了我的控制器和ASP.NET模板控制器的使用语句之后
1 | using System.Web; |
帮我解决了这个问题。您还需要添加:
1 2 | using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.Owin; |
使用GetUserManager方法。
Microsoft无法像其他缺少的using语句一样,通过右键单击并解决自动解决此问题?
在我的例子中,通过nuget添加microsoft.aspnet.webapi.owin引用是一个技巧。
确保安装了nuget包
只是使用
HttpContext.Current.GetOwinContext()
在我的案子里耍了花招。
在API中获取用户管理器
1 | return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>(); |
其中,AppUserManager是从UserManager继承的类。
我有所有正确的软件包和使用方法,但在让
对于在Web API项目中获取此错误的开发人员-
getowincontext扩展方法在
链接到package:owin package安装命令-
1 | Install-Package Microsoft.AspNet.WebApi.Owin |
链接到system.web包:包安装命令-
1 | Install-Package Microsoft.Owin.Host.SystemWeb |
为了解决这个错误,您需要找到它在您的案例中发生的原因。请在您的代码中勾选以下几点-
你必须参考
使用Microsoft.aspnet.identity.owin;
在
1 | return _userManager1 ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>(); |
或
1 | return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>(); |
使用getowInContext()的完整代码-
1 2 3 4 5 6 7 8 9 10 11 | public ApplicationSignInManager SignInManager { get { return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>(); } private set { _signInManager = value; } } |
我在使用getowInContext()的代码文件中使用的命名空间
1 2 3 4 5 6 7 8 9 10 11 12 | using AngularJSAuthentication.API.Entities; using AngularJSAuthentication.API.Models; using HomeCinema.Common; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Web; using Microsoft.AspNet.Identity.Owin; using Microsoft.Owin.Security.DataProtection; |
在将代码从一个项目移动到另一个项目时,出现了此错误。