ASP.NET Identity-HttpContext没有GetOwinContext的扩展方法



我已经从这里下载并成功运行了ASP.NET Identity示例:https://github.com/rustd/AspnetIdentitySample

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

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

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

我已经尝试在我的控制器中实现与同一个direct相同的代码,但发现了相同的问题。

我显然在某个地方遗漏了一个参考资料,尽管我不知道。。!。。

杀死我的代码块是:

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,我可以找到该方法,但当我在解决方案中搜索它时,却找不到它。。。我一定有一些过期的图书馆,但我找不到!

ARGH!

我找到了。。。我没有额外的包裹,叫做Microsoft.Owin.Host.SystemWeb

一旦我搜索并安装了这个,它就工作了。

现在,我不确定我是否只是错过了所有的东西,尽管在阅读各种教程时没有发现这样的库或包的参考。当我安装所有这些Identity框架时,它也没有安装。。。不确定是不是只有我…

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

如果您在控制器之外,我认为您需要引用当前的HttpContext。MVC控制器具有对当前上下文的基本引用。然而,除此之外,您必须明确声明您想要当前的HttpContext

return HttpContext.Current.GetOwinContext().Authentication;

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

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方法。

Microsoft找不到一种方法来通过右键单击自动解决此问题,并像其他缺少的using语句一样解决?

在我的例子中,通过nuget添加Microsoft.AspNet.WebApi.Owin引用就成功了。

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

仅使用

HttpContext.Current.GetOwinContext()

在我的案例中成功了。

对于在Web API项目中获取此错误的开发人员-

GetOwinContext扩展方法在System.Web.Http.Owindll中定义,还需要一个包,即Microsoft.Owin.Host.SystemWeb。此软件包需要从nuget安装到您的项目中。

链接到程序包:OWIN程序包安装命令-

Install-Package Microsoft.AspNet.WebApi.Owin    

链接到System.web包:包安装命令-

Install-Package Microsoft.Owin.Host.SystemWeb

为了解决这个错误,你需要找出它发生在你的案例中的原因。请在您的代码中交叉检查以下几点-

  1. 您必须参考Microsoft.AspNet.Identity.Owin;

    使用Microsoft.AspNet.Identity.Owin;

  2. HttpContext.Current下定义GetOwinContext()如下-

    return _userManager1 ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
    

    return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
    

使用GetOwinContext()的完整代码-

public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}

命名空间的我在使用GetOwinContext()的代码文件中使用

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;

我在将代码从一个项目移动到另一个项目时遇到了这个错误。

在API中获取UserManager

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

其中,AppUserManager是从UserManager继承的类。

我有所有正确的包和using,但必须先构建GetOwinContext()才能工作。

只需安装此软件包,您的代码就会工作:=>安装软件包Microsoft.Owin.Host.SystemWeb-2.1.0版

最新更新