Dar*_*ght 367 c# asp.net asp.net-mvc asp.net-identity
我已经从这里下载并成功运行了ASP.NET Identity示例:https: //github.com/rustd/AspnetIdentitySample
我现在正在我的项目中实现ASP.NET Identity框架,并遇到了一个问题,这让我整天都疯了......
GetOwinContext()
不存在作为我的扩展方法HttpContext
我正在类库中实现身份框架.我已经安装了Identity框架的所有最新版本(预发布版本),除此之外的所有内容都正常工作.
我尝试在我的控制器中实现与直接相同的代码,并找到相同的问题.
我显然错过了某个地方的参考,虽然我不知道是什么..!..
杀死我的代码块是:
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
Run Code Online (Sandbox Code Playgroud)
我添加了对以下内容的引用 - 在我的类库中尝试了这些并且也直接在控制器上,它们都不适合我...
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using Microsoft.Owin;
using System.Web;
Run Code Online (Sandbox Code Playgroud)
......这让我起了墙......任何想法?
UPDATE
我已经检查了示例中Identity和OWIN的版本,并确保我的解决方案中有相同的版本.
更重要的是,如果我在样本上搜索对象浏览器,GetOwinContext
我可以找到该方法,但是当我在我的解决方案中搜索它时,无处可寻......我必须有一些库过时,但我可以'找到它!
Dar*_*ght 687
哎呀!
我找到了 ......我没有额外的包裹,叫做Microsoft.Owin.Host.SystemWeb
一旦我搜索并安装了它,它就有效了.
现在 - 我不确定我是否只是错过了所有内容,但在浏览各种教程时发现没有参考这样的库或包.当我安装所有这个Identity框架时它也没有安装......不确定它是否只是我...
编辑
虽然它在Microsoft.Owin.Host.SystemWeb
程序集中是System.Web
命名空间中的扩展方法,但是你需要引用前者,而using
后者.
Tom*_*mmy 172
我相信HttpContext
如果你在控制器之外,你需要引用电流.MVC控制器具有对当前上下文的基本引用.但是,除此之外,您必须明确声明您想要当前HttpContext
return HttpContext.Current.GetOwinContext().Authentication;
Run Code Online (Sandbox Code Playgroud)
至于它没有显示,使用您在上面显示的代码(the 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;
Run Code Online (Sandbox Code Playgroud)
注释掉每一个,它GetOwinContext()
实际上是System.Web.Mvc程序集的一部分.
Ron*_*ger 21
在尝试和错误比较我的控制器和Asp.Net模板控制器的using语句之后
using System.Web;
Run Code Online (Sandbox Code Playgroud)
解决了我的问题.您还需要添加:
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
Run Code Online (Sandbox Code Playgroud)
使用GetUserManager方法.
Microsoft无法通过右键单击自动解决此问题,并像其他缺少使用语句一样解决?
Cod*_*und 14
确保安装了nuget包Microsoft.AspNet.Identity.Owin
.然后添加System.Net.Http
命名空间
小智 5
在 API 中获取 UserManager
return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>();
Run Code Online (Sandbox Code Playgroud)
其中 AppUserManager 是从 UserManager 继承的类。
对于开发人员,在Web API项目中遇到此错误-
GetOwinContext扩展方法在System.Web.Http.Owin
dll中定义,并且将需要一个以上的软件包,即Microsoft.Owin.Host.SystemWeb
。该软件包需要从nuget安装到您的项目中。
链接到软件包:OWIN软件包安装命令-
Install-Package Microsoft.AspNet.WebApi.Owin
Run Code Online (Sandbox Code Playgroud)
链接到System.web软件包:软件包安装命令-
Install-Package Microsoft.Owin.Host.SystemWeb
Run Code Online (Sandbox Code Playgroud)
为了解决此错误,您需要找到在您的情况下发生此错误的原因。请交叉检查代码中的以下几点-
您必须参考 Microsoft.AspNet.Identity.Owin;
使用Microsoft.AspNet.Identity.Owin;
定义GetOwinContext()
在HttpContext.Current
如下-
return _userManager1 ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
Run Code Online (Sandbox Code Playgroud)
要么
return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
Run Code Online (Sandbox Code Playgroud)使用GetOwinContext()的完整代码-
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}
Run Code Online (Sandbox Code Playgroud)
我在使用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;
Run Code Online (Sandbox Code Playgroud)
我将代码从一个项目移动到另一个项目时遇到此错误。
归档时间: |
|
查看次数: |
149310 次 |
最近记录: |