在上下文中找不到owin.Environment项

时间:2013-08-14 13:05:15

标签: asp.net .net owin katana asp.net-identity

Microsoft最近introduced新的ASP.NET标识 - 替换旧的(简单)成员资格。不幸的是,我不能在我的旧项目中使用这个新的成员资格系统,因为它抛出System.InvalidOperationException:在上下文中找不到owin.Environment项。这是一个众所周知的bug,但微软对这个问题保持沉默。重现此错误的最简单方法 - 在VS 2013(使用Web Tools 2013 Preview Refresh)创建新的Web应用程序(MVC,WebForms或WebApi - 无关紧要),然后转到登录页面。它会工作。然后将应用程序中的命名空间更改为原始命名空间以外的任何内容,登录页面将抛出该错误将名称空间更改回原始名称(您在创建项目时使用的名称空间)将解决此问题。

看起来.net存储某些与原始命名空间相关的东西,但我找不到它在哪里,它不在项目文件夹中。我知道stackoverflow不是bug报告的地方,我只是希望有人已经找到了解决这个问题的方法,或者参与ASP.NET身份开发的人会看到这个。

13 个答案:

答案 0 :(得分:26)

很可能找不到OWIN Startup类。 Startup类的默认约定是[AssemblyName] .Startup。如果您不再遵循该约定,则需要在Web.Config中指定Startup类的全名。     

当找不到Startup类时,Microsoft.Owin.Host.SystemWeb包的下一个版本现在会抛出详细的异常消息。

答案 1 :(得分:8)

我创建了两个名为TesteMvc5.2和TesteMvc5.0的新项目,两个项目都没有开始工作

这是因为默认命名空间与程序集名称不同。 但在我把线放后

<add key="owin:AppStartup" value="TesteMvc5._2.Startup, TesteMvc5.2" />

在web.config上运行正常。

答案 2 :(得分:8)

我有完全相同的错误,但事实证明我的web.config中有另一个配置问题。我的web.config缺少属性defaultLanguage =&#34; c#&#34;在system.web。

下的编译元素中

在这种情况下,它将默认为VB。因此,除非您使用VB编写Startup类,否则应将默认语言更改为C#。

不正确:

<compilation debug="true" optimizeCompilations="true" targetFramework="4.6.1">

这是正确的(除非你使用VB):

<compilation debug="true" defaultLanguage="c#" optimizeCompilations="true" targetFramework="4.6.1">

答案 3 :(得分:6)

我有同样的问题,确认此行在web.config中后修复:

<add key="owin:AutomaticAppStartup" value="true" />

答案 4 :(得分:4)

我尝试了此页面上提到的所有内容,但没有任何效果。然后我发现IIS中名为owin的设置:AutomaticAppStartup。您可以在IIS管理器的“应用程序设置”页面中找到默认网站。检查该设置是否为真。如果未设置为true。这对我有用。

这是我找到答案的网站: http://gotoanswer.stanford.edu/?q=Microsoft.Owin.Host.SystemWeb+and+still+getting+No+owin.Environment+item+was+found+in+the+context

答案 5 :(得分:3)

我有同样的问题。我用web.config修复了它。

但是我已经更改了程序集名称和命名空间,并且在任何地方都找不到原始程序集名称。

然后我发现干净并没有从垃圾箱中移除原始组件。

Aftter删除bin垃圾,我能够删除web.config OWIN条目。

答案 6 :(得分:2)

清理ASP.NET临时文件帮助我解决了这个问题

答案 7 :(得分:1)

如果您碰巧从MVC4复制了以下配置,则应将其从web.config中删除

<add key="owin:AutomaticAppStartup" value="false" />

答案 8 :(得分:0)

有同样的问题。感谢您的共享解决方案。 这个..  

<add key="owin.AppStartup" value="Namespace.Startup, Namespace"/>
<add key="owin:AutomaticAppStartup" value="false"/>  

为我修好了

答案 9 :(得分:0)

我不知道为什么这行得通,但是行得通!

我的问题是在VS2013中。在WebConfig中,将debug设置为true,然后收到该错误。当我将其设置为false时,它可以正常工作,然后我重置为true,它继续可以正常工作!

起初,当debug为true之前,将其更改为false,然后在StartUp代码中添加了一个断点,但根本没有达到。更改为false后,按Save(保存),然后再返回true,则调用StartUp代码,程序将按预期运行。

答案 10 :(得分:0)

以上所有答案对我都没有作用。

原来,我的项目缺少包含以下内容的“启动”类:

state.blocks.hash

名为“ Startup.cs”的文件位于项目的根文件夹(〜/)中。

我的“ Web.config”在其他答复中都没有张贴任何“ Owin”配置。

答案 11 :(得分:0)

我在 Optimizely (Episerver) 解决方案中遇到了此错误,其中我有两个使用相同 CMS 数据库的功能分支。在一个功能分支中,我正在使用访客标准进行概念验证。所以我创建了这样的东西:

    public class SomeVisitorCriterionSettings : CriterionModelBase
    {
        public override ICriterionModel Copy()
        {
            return base.ShallowCopy();
        }
    }



[VisitorGroupCriterion(
    Category = "Some category",
    DisplayName = "My visitor criterion")]
public class SomeVisitorCriterion : CriterionBase<SomeVisitorCriterionSettings>
{
    public override bool IsMatch(IPrincipal principal, HttpContextBase httpContext)
    {
        // match logic here..
    }
}

在 Episerver -> CMS -> 访客组中,我创建了此访客标准的一个实例。切换到另一个不存在此代码的分支后,但数据库中的实例存在,抛出了Owin异常。

在 CMS 中删除访问者标准解决了这个问题,但老实说,我不知道为什么会抛出这种异常。不过我很想知道..

答案 12 :(得分:-1)

在web.config中为编译添加默认语言为我做了!