ASP.NET MVC:没有owin.Environment

问题描述 投票:6回答:2

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

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

这是触发此错误的行:

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"/>添加到web.config。
  3. <modules runAllManagedModulesForAllRequests="true">添加到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>
c# asp.net iis
2个回答
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");
            });
        }
    }
}

0
投票

当我将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);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.