33

微软最近推出了新的 ASP.NET 身份 - 替代旧的(简单)会员。不幸的是,我不能在我的旧项目中使用这个新的会员系统,因为它会抛出 System.InvalidOperationException: No owin.Environment item was found in the context。这是一个已知的错误,但微软对此问题保持沉默。重现此错误的最简单方法 - 它是在 VS 2013 中创建一个新的 Web 应用程序(MVC、WebForms 或 WebApi - 无关紧要)(使用 Web Tools 2013 Preview Refresh),然后转到登录页面。它会起作用的。然后将应用程序中的命名空间更改为原始命名空间以外的任何其他名称,登录页面将引发该错误。将名称空间改回原始名称(您在创建项目时使用的名称)将解决此问题。

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

4

13 回答 13

28

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

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

于 2013-08-16T03:47:42.637 回答
15

我遇到了同样的问题,在确保此行位于 web.config 后已修复:

<add key="owin:AutomaticAppStartup" value="true" />
于 2015-07-19T18:48:59.577 回答
15

我遇到了完全相同的错误,但事实证明我的 web.config 中有另一个配置问题。我的 web.config 在 system.web 下的编译元素中缺少属性 defaultLanguage="c#"。

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

不正确:

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

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

<compilation debug="true" defaultLanguage="c#" optimizeCompilations="true" targetFramework="4.6.1">
于 2016-03-07T17:04:12.980 回答
8

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

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

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

在 web.config 上它运行良好。

于 2013-08-20T02:10:02.887 回答
8

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

于 2015-10-30T15:17:35.003 回答
4

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

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

于 2015-03-09T20:50:28.370 回答
3

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

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

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

删除垃圾箱后,我能够删除 web.config OWIN 条目。

于 2013-11-02T21:20:13.443 回答
3

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

<add key="owin:AutomaticAppStartup" value="false" />
于 2015-01-05T11:01:23.690 回答
3

以上答案都不适合我。

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

using Microsoft.Owin;
using Owin;

[assembly: OwinStartupAttribute(typeof(NAMESPACE.Startup))]
namespace NAMESPACE
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
        }
    }
}

这个名为“Startup.cs”的文件位于项目的根文件夹 (~/) 上。

我的“Web.config”没有在其他回复中发布任何这种“Owin”配置。

于 2018-07-10T20:13:16.557 回答
1

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

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

为我固定

于 2018-05-25T11:09:31.137 回答
0

我不知道为什么这有效,但确实有效!

我的问题是在 VS2013 中。在 WebConfig 中,调试设置为 true,我得到了那个错误。当我将它设置为 false 时它工作正常,然后我重置为 true 并且它继续正常工作!

起初,当 debug 在更改为 false 之前为 true 时,我在 StartUp 代码中设置了一个断点,但根本没有达到。更改为 false 按保存然后返回 true 后,调用 StartUp 代码并且程序按其应有的方式工作。

于 2018-07-02T09:27:54.350 回答
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 中的访问者标准解决了这个问题,但老实说,我不知道为什么会抛出这种异常。不过我很想知道..

于 2021-07-21T07:19:12.203 回答
-1

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

于 2017-03-02T12:09:18.580 回答