在上下文中找到了Microsoft.Owin.Host.SystemWeb并且仍然没有获得owin.Environment项

时间:2014-04-24 17:44:47

标签: c# visual-studio-2013 owin

我已经阅读了很多关于此的帖子,但仍然无法使其发挥作用。 我使用的是Visual Studio 2013.我创建了一个新的MVC 5项目,并认为使用新的facebook登录集成会很酷。它在我的电脑上运行在IIS Express中。

但是当我将它上传到生产服务器时,我不断收到非常烦人的" No owin.Environment项目已在上下文中找到"消息。

这就是我所做的。

  1. 我从未更改过我的项目或程序集的名称。
  2. 程序集名称为Wodivate
  3. 命名空间是Wodivate
  4. 我有默认的Startup.cs类,其中包含以下内容:

    using Microsoft.AspNet.Identity;
    using Microsoft.Owin;
    using Microsoft.Owin.Security.Cookies;
    using Owin;
    using System.Web.Http;
    
    [assembly: OwinStartupAttribute(typeof(Wodivate.Startup))]
    namespace Wodivate
    {
        public partial class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                ConfigureAuth(app);
            }
    
        }
    }
    
  5. 在App_Start中有一个Startup.Auth.cs文件,其中包含:

    using Microsoft.AspNet.Identity;
    using Microsoft.Owin;
    using Microsoft.Owin.Security.Cookies;
    using Owin;
    
    namespace Wodivate
    {
        public partial class Startup
        {
            // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
            public void ConfigureAuth(IAppBuilder app)
            {
                // Enable the application to use a cookie to store information for the signed in user
                app.UseCookieAuthentication(new CookieAuthenticationOptions
                {
                    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                    LoginPath = new PathString("/Account/Login")
                });
                // Use a cookie to temporarily store information about a user logging in with a third party login provider
                app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
    
                // Uncomment the following lines to enable logging in with third party login providers
                //app.UseMicrosoftAccountAuthentication(
                //    clientId: "",
                //    clientSecret: "");
    
                //app.UseTwitterAuthentication(
                //   consumerKey: "",
                //   consumerSecret: "");
    
                var facebookOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions()
                {
                    AppId = "xxxxxxxxxxxxxxxxxxx",
                    AppSecret = "xxxxxxxxxxxxxxxxxxxxxxxxx"
                };
                facebookOptions.Scope.Add("email"); //We want to get user's email information by adding it in scope.
                app.UseFacebookAuthentication(facebookOptions);    
    
                //app.UseGoogleAuthentication();
            }
        }
    }
    
  6. 我的Web.config文件包含:

    <add key="owin:AppStartup" value="Wodivate.Startup, Wodivate" />
    <add key="owin:AutomaticAppStartup " value="false" />
    
  7. 我还确保关注No owin.Environment item was found in the context - only on server上的帖子并安装了Microsoft.Owin.Host.SystemWeb

  8. 还有其他人坚持这个吗?我已经打了3天了。

7 个答案:

答案 0 :(得分:4)

我遇到了同样的问题,这是由IIS设置引起的。

我的IIS部署有一个顶级网站,下面有几个应用程序。您应确保站点级别的“应用程序设置”不与您的应用程序冲突。

在我的情况下,我在网站级别有“owin:AutomaticAppStartup = false”,这是我的应用程序继承的。

<强>要点:

  1. 打开IIS管理器
  2. 选择服务器 - &gt;应用程序设置。确保此级别没有任何冲突。
  3. 选择网站 - &gt;应用程序设置。确保此级别没有任何冲突。
  4. enter image description here


    修改 我发现你可以在web.config中添加以下appSetting来覆盖任何潜在的继承冲突。我建议先了解是否存在冲突,这样你就可以做出有根据的改变。

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

答案 1 :(得分:3)

我需要另外一个web.config更改来解决这个问题:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

虽然我试过了this setting is discouraged

<modules>
  <remove name="Owin" />
  <add name="Owin" type="Microsoft.Owin.Host.SystemWeb.OwinHttpModule, Microsoft.Owin.Host.SystemWeb" />
</modules>

但这给了我错误:

&#34;由于对象的当前状态&#34;

,操作无效

并且我不确定那里发生了什么,是否是错误的模块或其他内容。

答案 2 :(得分:3)

您是否尝试过这样的事情?

<system.webServer>
    <modules runAllManagedModulesForAllRequests="false" />
    <handlers>
        <remove name="StaticFile" />
        <add name="OWIN" path="*" verb="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler" />
    </handlers>
</system.webServer>

答案 3 :(得分:2)

您是否已检查正在使用的应用池模式。 OWIN使用应用程序池的集成模式。它不会在clasic模式下工作。

答案 4 :(得分:1)

当您收到异常时,在上下文中找不到owin.Environment项目。&#39;来自Request.GetOwinContext(),它通常意味着OWIN启动类检测失败。

确保IIS在启动时在Startup.cs(在根文件夹中)中执行代码。要检查它是否在生产服务器上,我建议如下。 1)插入以下行:

...
 System.Diagnostics.Trace.WriteLine("OwinStartup " + this.GetType().Namespace);
 ConfigureAuth(app);
...

2)从这里获取DebugView实用程序:https://technet.microsoft.com/en-us/library/bb896647.aspx

3)以管理员身份执行DbgView.exe并确保选项&#34; Capture / Capture Global Win32&#34;已启用。

4)当IIS启动时,您应该会看到上述代码中的跟踪消息(确保通过触摸web.config确实重新启动了它)。

5)如果没有执行,请点击此处:http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection

有很多原因导致它没有被执行。其中许多都在stackoverflow上。我还要补充一点:确保您没有设置&#34; batch = false&#34;关于编译&#39; web.config的节点。

答案 5 :(得分:0)

您的BIN不包括参考资料。在首选项中,将其更改为“复制本地”为TRUE。然后再发布一次。

答案 6 :(得分:0)

我为此挣扎了几天!在我能找到的每个帖子中尝试了一切,这解决了这个问题。我正在VS 2013中开发并发布到Server 2008虚拟机,并且我一直得到“在上下文中找不到owin.Environment项目”消息。

我把这个条目放在web配置中的模块中并修复了它。我不确定我理解为什么它修复了它但确实如此。

    <modules  runAllManagedModulesForAllRequests="true" />