相关疑难解决方法(0)

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

我已经从这里下载并成功运行了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我可以找到该方法,但是当我在我的解决方案中搜索它时,无处可寻......我必须有一些库过时,但我可以'找到它!

c# asp.net asp.net-mvc asp.net-identity

367
推荐指数
9
解决办法
15万
查看次数

Webapi,Webhost和Owin之间的关系

我只是试图了解webapi,webhost(iis)和owin之间的关系.我会写下我目前的理解,并请你告诉我它是否正确.

  • 与MVC不同,Webapi是以独立于主机的方式编写的.这是在Owin之前的日子,但显然他们预计Owin迟早会发生.主机独立性主要意味着System.Web不在Webapi代码中的任何地方使用.System.Web完全依赖于IIS,没有它就无法工作.这样,Webapi理论上可以在任何地方托管 - 一旦其他主机可用.
  • Webhost(Microsoft.Owin.Host.SystemWeb,Microsoft.AspNet.WebApi.WebHost)是更高级API(如Webapi)和IIS之间的层.由于Webapi最初是独立于主机的,因此需要一个中间层来使其在特定主机(如IIS)上运行.Webapi(Microsoft.AspNet.WebApi.WebHost)的Webhost 提供了这一层.稍后还将有Owin(Microsoft.Owin.Host.SystemWeb)的Webhost层,允许在IIS上托管Owin兼容的任何东西.
  • Owin绕过最后一个.它基本上提供了一个抽象,理论上允许在任何主机上托管任何Owin兼容的应用程序,只要owin和该主机之间有一个层.Owin附带Microsoft.Owin.Host.SystemWeb了Webhost ()(类似于Webapi带来的Webhost),允许Owin应用程序在IIS上托管.它还带有自托管(Microsoft.Owin.SelfHost),允许Owin应用程序托管在任何可执行文件中.就Webapi而言,Owin还为Owap主机提供了Webapi(Microsoft.AspNet.WebApi.Owin),允许在Owin堆栈上运行WebApi.

以上所有意味着一个人有两种不同的方式在IIS上托管Webapi.它可以在没有Owin的情况下使用Webapi WebHost完成,也可以使用Owin Host for Webapi和Webhost for Owin完成.

Nuget参考:

这种理解是否正确?

.net asp.net iis asp.net-web-api owin

28
推荐指数
1
解决办法
5802
查看次数

'Microsoft.Owin.IOwinContext'不包含'GetUserManager'的定义,也没有扩展方法?

从Asp.Net Identity 2.0示例复制以下代码.

private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
    get
    {
        return // Error 
          _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
    }
    private set
    {
        _userManager = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是它会出现以下错误?

错误3'Microsoft.Owin.IOwinContext'不包含'GetUserManager'的定义,并且没有扩展方法'GetUserManager'接受类型为'Microsoft.Owin.IOwinContext'的第一个参数'(您是否缺少using指令或装配参考?)

更新:

Microsoft.AspNet.Identity.Owin.dll的版本2已存在于...\packages\Microsoft.AspNet.Identity.Owin.2.0.1\lib \net45中.

但是,HttpContext.GetOwinContext()我的项目和样本之间的视图定义是不同的.我项目的前三行是

#region Assembly Microsoft.Owin.Host.SystemWeb.dll, v2.0.0.0
// C:\......\packages\Microsoft.Owin.Host.SystemWeb.2.0.0\lib\net45\Microsoft.Owin.Host.SystemWeb.dll
#endregion

而样本是

#region Assembly Microsoft.Owin.Host.SystemWeb.dll, v2.1.0.0
// C:\....\sample\packages\Microsoft.Owin.Host.SystemWeb.2.1.0\lib\net45\Microsoft.Owin.Host.SystemWeb.dll
#endregion

但我已经使用Neget将所有Owin Nuget软件包更新到最新版本.

asp.net asp.net-mvc-5 asp.net-identity asp.net-identity-2

23
推荐指数
1
解决办法
1万
查看次数

IOwinContext不包含GetUserManager()的定义

我决定使用ASP.NET身份的帐户确认和密码恢复.我正在使用Identity 2.1.0.我将NuGet中的示例MVC应用程序安装到一个空项目中,以便我可以看看它是如何配置的.

将更改合并到我的项目后,有一个错误,我不明白如何解决:

'Microsoft.Owin.IOwinContext'不包含'GetUserManager'的定义,并且没有扩展方法'GetUserManager'接受类型为'Microsoft.Owin.IOwinContext'的第一个参数'(您是否缺少using指令或程序集引用) ?)C:\ Users\xxxxx\Source\Repos\xxxxxx\xxxxxx\xxxxxx\Controllers\AccountController.cs 48 69 xxx xxx xxx

我的AccountController.cs中抛出了错误:

public ApplicationUserManager UserManager
{
    get
    {
        return _userManager ?? 
            HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
    }
    private set
    {
        _userManager = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

在示例应用程序和我的项目中,我在属性中看到两个项目都安装了Microsoft.AspNet.Identity.Owin版本2.0.0.0.

当我右键单击我的项目和Goto定义中的GetOwinContext()时,它显示元数据来自Assembly Microsoft.Owin.Host.SystemWeb.dll, v2.1.0.0,但当我点击Microsoft.Owin.Host.SystemWeb引用时我在属性中看到它只是版本2.0.0.0 - 不仅这看起来很奇怪,但它也与显示2.1.0.0的示例应用程序不同. - 这是我能找到的唯一区别.

除了上面的粗体段落之外,我没有发现任何差异.这似乎不对,但我不确定,如果错误,我不知道如何修复它.

.net c# asp.net asp.net-mvc asp.net-identity

2
推荐指数
1
解决办法
3624
查看次数