我非常感谢这个问题,但我无法解决这个问题,所以我认为在这个网站上创建一个新问题。
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。
心存感激
答案 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
,因此我们可以在创建新类型时访问它。这可能对每个人都没有帮助,因为它更具体地满足一个人的需求,但有助于您了解。