【问题标题】:ASP.NET MVC: No owin.EnvironmentASP.NET MVC:没有 owin.Environment
【发布时间】:2015-07-16 13:23:07
【问题描述】:

我觉得我遇到了和described in this thread 一样的问题。一世 我正在开发一个在本地运行良好的 ASP.NET MVC Web 应用程序。但是,当使用 IIS7 部署到我们的 Windows Server 2008 时,尝试登录时出现以下错误:

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

这是触发此错误的行:

return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();

我已经尝试了所有我能找到的:

  1. 在 web.config 中添加 &lt;add key="owin:AppStartup" value="My_App.Startup,My-App"/&gt;。我的应用程序的名称中有一个连字符,但是 这应该不是问题吧?
  2. &lt;add key="owin:AutomaticAppStartup" value="true"/&gt; 添加到 web.config。
  3. &lt;modules runAllManagedModulesForAllRequests="true"&gt; 添加到 web.config。
  4. 我确认Microsoft.Owin.Host.SystemWeb 已安装并在 bin 文件夹。
  5. 清除 ASP.net 临时文件。
  6. 应用程序池设置为“集成”

它在本地工作得很好。 我错过了什么?

这不是 this 线程的副本。我从那里尝试了解决方案(请参阅我的#1),但没有成功。另外,我没有更改命名空间。

编辑 一种解决方案是在 web.config 中显式注册 OwinHttpHandler 但这有一些奇怪的副作用(我的 CSS 和 JavaScript 不再加载,状态 404?):

<handlers>
    <add name="OWIN" path="*" verb="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler" />
</handlers>

【问题讨论】:

  • 这不是重复的,因为那里给出的解决方案对我不起作用 - 我已经尝试过了(请参阅我的第 1 点和第 4 点)
  • 应用池是如何配置的?
  • 应用池设置为集成。
  • 确保身份工作者完全控制根文件夹并将 CAS 信任级别设置为完全

标签: c# asp.net iis


【解决方案1】:

命名约定: Katana 在与程序集名称或全局命名空间匹配的命名空间中查找名为 Startup 的类。

OwinStartup 属性: 这是大多数开发人员用来指定启动类的方法。以下属性将启动类设置为 StartupDemo 命名空间中的 TestStartup 类。

[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]

<appSettings>  
  <add key="owin:appStartup" value="StartupDemo.ProductionStartup" />
</appSettings>

也可以使用以下显式指定启动类和程序集的键:

  <add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" />


<appSettings>  
  <add key="owin:appStartup" value="ProductionConfiguration" />       
</appSettings>

上述标记必须与以下 OwinStartup 属性一起使用,该属性指定友好名称并导致 ProductionStartup2 类运行。

[assembly: OwinStartup("ProductionConfiguration", typeof(StartupDemo.ProductionStartup2))]

namespace StartupDemo
{
    public class ProductionStartup
    {
        public void Configuration(IAppBuilder app)
        {
            app.Run(context =>
            {
                string t = DateTime.Now.Millisecond.ToString();
                return context.Response.WriteAsync(t + " Production OWIN App");
            });
        }
    }
    public class ProductionStartup2
    {
        public void Configuration(IAppBuilder app)
        {
            app.Run(context =>
            {
                string t = DateTime.Now.Millisecond.ToString();
                return context.Response.WriteAsync(t + " 2nd Production OWIN App");
            });
        }
    }
}

【讨论】:

    【解决方案2】:

    当我将 Identity 添加到现有项目时,我遇到了同样的问题。我发现当我从 NuGet 添加身份包时,我在项目的根目录中没有 Startup.cs。我用以下代码添加了一个,一切正常。

    using Microsoft.Owin;
    using Owin;
    
    [assembly: OwinStartup(typeof(YourProjectName.Startup))]
    namespace YourProjectName
    {
        public partial class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                ConfigureAuth(app);
            }
        }
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 2010-11-28
      相关资源
      最近更新 更多