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>();
我已经试了所有我能找到的:
- 将
<add key="owin:AppStartup" value="My_App.Startup,My-App"/>
添加到web.config中。我的应用程序的名称中有一个连字符,但是这应该不是问题,对吧? - 添加
<add key="owin:AutomaticAppStartup" value="true"/>
到. config。 - 添加
<modules runAllManagedModulesForAllRequests="true">
到. config。 - 我确认
Microsoft.Owin.Host.SystemWeb
已经安装并且在bin文件夹。 - 清除ASP.net临时文件。
- 应用池设置为"integrated"
它在本地工作得很好。我错过了什么?
这不是这个线程的副本。我从那里尝试了解决方案(参见我的第一条),但没有成功。另外,我没有更改名称空间。
编辑一种解决方案是在web中显式注册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);
}
}
}