如何在启动时获取 HttpContext.Current.GetOwinContext()

how to get HttpContext.Current.GetOwinContext() in 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 class 中获取了 GetOwinContext。

感恩

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

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

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,因此我们可以在创建新类型时访问它。这可能不会对每个人都有帮助,因为它更符合个人的需求,但了解它很有用。