ASP.NET MVC: No owin.Environment

本文关键字:owin Environment No NET MVC ASP | 更新日期: 2023-09-27 18:03:14

我觉得我有同样的问题在这个线程中描述。我我在做ASP。NET MVC web应用程序,在本地运行良好。但是,当使用IIS7部署到Windows Server 2008时,我在尝试登录时得到以下错误:

没有owin。在上下文中找到了环境项。

这是触发这个错误的行:

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

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

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

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

这不是这个线程的副本。我从那里尝试了解决方案(参见我的第一条),但没有成功。另外,我没有更改名称空间。

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

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

ASP.NET MVC: No owin.Environment

命名约定: 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");
            });
        }
    }
}

当我将Identity添加到现有项目中时,我遇到了同样的问题。我发现,当我从NuGet添加Identity包时,在项目的根目录中没有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);
        }
    }
}