我觉得我和described in this thread有同样的问题。我正在开发一个在本地运行良好的ASP.NET MVC Web应用程序。但是,当使用IIS7部署到我们的Windows Server 2008时,尝试登录时出现以下错误:
在上下文中找不到owin.Environment项。
这是触发此错误的行:
return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
我尝试了所有我能找到的东西:
<add key="owin:AppStartup" value="My_App.Startup,My-App"/>
脚趾web.config。我的应用程序在其名称中有一个连字符,但这应该不是问题,对吧?<add key="owin:AutomaticAppStartup" value="true"/>
添加到web.config。<modules runAllManagedModulesForAllRequests="true">
添加到web.config。Microsoft.Owin.Host.SystemWeb
已安装在bin文件夹中。它在当地工作得很好。我错过了什么?
这不是this线程的重复。我从那里尝试过解决方案(参见我的#1)但没有成功。另外,我还没有更改名称空间。
编辑一个解决方案是在web.config中显式注册OwinHttpHandler但这有一些奇怪的副作用(我的CSS和JavaScript不再加载,状态404?):
<handlers>
<add name="OWIN" path="*" verb="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler" />
</handlers>
命名约定: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);
}
}
}