如何在启动

时间:2016-07-15 10:10:17

标签: asp.net asp.net-mvc owin startup

我非常感谢这个问题,但我无法解决这个问题,所以我认为在这个网站上创建一个新问题。

HttpContext.Current.GetOwinContext();

我想用上面的代码获取GetOwinContext值。上面的代码有我的startup.cs

[assembly: OwinStartupAttribute(typeof(OwinTest.Startup))]

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
        var c = HttpContext.Current.GetOwinContext();
    }
}

我收到此错误

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

var c = HttpContext.Current.GetOwinContext();在HomeController很适合我。!

我刚刚在startup.cs类中获取了GetOwinContext。

心存感激

2 个答案:

答案 0 :(得分:6)

你不能这样做。没有请求,OWIN上下文不存在,Startup类只为应用程序运行一次,而不是为每个请求运行一次。您的Startup类应该初始化您的中间件,您的应用程序和中间件以及应用程序应该在需要时访问OWIN上下文。

答案 1 :(得分:0)

如前所述,您的要求是不可能的。但是,根据您的要求,可以进行以下操作,并允许您在创建对象实例的上下文中进行访问。这是我需要检查某实例是否已添加的其他地方(我在不同项目中有多个启动类)的事情。

public void Configuration(IAppBuilder app)
{
     ConfigureAuth(app);

     // Ensure we have our "main" access setup
     app.CreatePerOwinContext<DataAccessor>(
            (options, owinContext) => 
            {
                // Check that an instance hasn't already been added to
                // the OwinContext in another plugin
                return owinContext.Get<DataAccessor>() ?? DataAccessor.CreateInstance(options, owinContext);
            }
        );
}

CreatePerOwinContext中,我们可以访问OwinContext,因此我们可以在创建新类型时访问它。这可能对每个人都没有帮助,因为它更具体地满足一个人的需求,但有助于您了解。