我有一个使用Nancy的自我托管的Owin应用程序。在其中一个NancyModules中,我需要获得IOwinContext
的实例。在NancyContext中找不到OwinContext
这个问题倒是主题,但在它没有解决:Get current owin context in self host mode
它说,南希,你必须使用NancyContext去的项目字典,并寻找相应的键“的价值OWIN_REQUEST_ENVIRONMENT”。
我确实可以访问NancyContext,我可以看到Items字典并且它包含一个名为“OWIN_REQUEST_ENVIRONMENT”的键。 (我也可以拨打NancyContext.GetOwinEnvironment()
扩展,可以得到相同的结果 然而,当我拿到钥匙不包含实际IOwinContext。
它含有大量键约Owin(某些按键信息是owin.RequestPath,owin.RequestMethod,owin.CallCancelled,更多),但不是实际的上下文对象。它是唯一真正有各种键一本字典,所以我不能将其转换为IOwinContext
如何从NancyContext获得IOwinContext对象?
public class MyStartup
{
public void Start()
{
var options = new StartOptions()
options.Urls.Add(new Uri("http://*:8084"));
options.AppStartup(this.GetType().AssemblyQualifiedName;
var host = WebApp.Start(options, Configuration);
}
public void Configuration(IAppBuilder app)
{
app.UseNancy();
}
}
public class MyModule : NancyModule
{
Get["/", true] = async(x, ct) =>
{
var owinEnvironment = Context.GetOwinEnvironment();
// Now what?
}
}
这个工作在一定程度上,但我似乎无法得到已在较早的时机已经登记的OwinContext,像AspNet.Identity.UserManager对象。在'Configuration(IAppBuilder应用程序)'方法中,我也做了一个'app.CreatePerOwinContext(MyUserManager.Create);'。在创建一个像你所建议的新的OwinContext之后,对'owinContext.GetUserManager ()'的调用返回NULL,所以我不确定创建一个新的OwinContext实际上包含了之前已经注册过的内容。 –
GTHvidsten
那么,我相信你可以从基本的http上下文访问owin上下文(我举了一个例子) – MaKCbIMKo
我喜欢使用'HttpContext.Current'的建议,但不幸的是,这从NancyModule类是不可用的。至少在我调试入口点时看到有什么可用。 – GTHvidsten