ASP。HttpContext没有getowwincontext的扩展方法

我已经下载,并成功运行ASP。NET Identity示例: https://github.com/rustd/AspnetIdentitySample < / p >

我现在正在实现ASP。NET身份框架在我的项目中遇到了一个问题,这让我抓狂了一整天…

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,我可以找到方法,但是当我在解决方案中搜索它时,它无处可寻……我一定是有什么过期的图书馆,但我找不到!

184721 次浏览

我相信如果你在控制器之外,你需要引用当前的HttpContext。MVC控制器有一个对当前上下文的基本引用。然而,除此之外,你必须显式声明你想要当前的HttpContext

return HttpContext.Current.GetOwinContext().Authentication;

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

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程序集的一部分。

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

啊!

我找到了……我没有一个额外的包,名为Microsoft.Owin.Host.SystemWeb

一旦我搜索和安装这个,它工作。

现在-我不确定我是不是错过了一切,虽然发现没有参考这样的库或包时,通过各种教程。当我安装所有的身份框架时,它也没有安装…不知道是不是只有我…

<强>编辑 虽然它在Microsoft.Owin.Host.SystemWeb程序集中,但它是System.Web命名空间中的扩展方法,所以你需要对前者有引用,并对后者有using

经过试验和错误比较使用语句的我的控制器和Asp。模板控制器

using System.Web;

为我解决了问题。 你还需要添加:

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

使用GetUserManager方法。

微软不能找到一种方法来解决这个问题自动与右击和解决像其他失踪使用语句?

我有所有正确的包和用法,但必须先构建,然后才能让GetOwinContext()工作。

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

在API中获取UserManager

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

其中AppUserManager是继承自UserManager的类。

只是用

HttpContext.Current.GetOwinContext ()

对我来说很管用。

对于开发人员在Web API项目中得到这个错误-

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

包链接: OWIN包安装命令-

Install-Package Microsoft.AspNet.WebApi.Owin

链接到系统。网络包:包安装命令-

Install-Package Microsoft.Owin.Host.SystemWeb

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

  1. 你必须有Microsoft.AspNet.Identity.Owin;的引用

    使用Microsoft.AspNet.Identity.Owin;< / p >

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

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

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

Complete Code Where GetOwinContext() is used -

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

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

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;

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

只要安装这个包,你的代码将工作:=> 安装软件包Microsoft.Owin.Host.SystemWeb -Version 2.1.0

. systemweb