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

英文则是:No owin.Environment item was found in the context 这个错误源自于:

1
2
3
4
5
private IAuthenticationManager AuthenticationManager { 
    get {
            return HttpContext.GetOwinContext().Authentication;
        }
}

使用的是ASP.NET Identity身份认证系统,在使用AuthenticationManager的时候,发生了一个异常。提示“在上下文中找不到 owin.Environment 项”,百度谷歌半天无果。 之后感觉是自己缺少Startup类的原因,在项目根目录加入了一个cs文件,代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
using Microsoft.Owin;
using Owin;

[assembly: OwinStartupAttribute(typeof(NovelSite.Startup))]
namespace NovelSite
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
        }
    }
}

运行,仍然抛出异常,按照ASP.NET Identity登录原理一文中所说:

每一个OWin的应用程序都需要有一个start up的类,用来声明我们要使用的OWin组件(即中间件)。Start up 类有以下几种声明方式。

  • 命名约定: Owin会扫描在程序集的根下名叫 startup的类作为默认启动配置类
  • OwinStartup 标签
1
[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
  • 我在web.config已经加了,Startup.cs也加了OwinStarup标签,仍然出错。

之后仔细看了一下AutomaticAppStartup的意思,这个是OWIN的自动发现,结果是false关闭,删掉这条之后,成功运行。

Built with Hugo
主题 StackJimmy 设计