首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将逻辑调用上下文从OWIN管道传递到WebApi控制器

将逻辑调用上下文从OWIN管道传递到WebApi控制器
EN

Stack Overflow用户
提问于 2015-03-22 21:15:50
回答 2查看 3.8K关注 0票数 19

我试图根据Stephen Cleary的帖子http://blog.stephencleary.com/2013/04/implicit-async-context-asynclocal.html;传递逻辑调用上下文的上下文信息(使用CallContext.LogicalSetData(CallContextKey, value)),并受到https://github.com/neuecc/OwinRequestScopeContext中代码的启发。

该值将通过OWIN管道可用,但当调用进入WebApi控制器时不可用,未设置该值。

我还注意到,当在控制器中设置断点时,我在调用堆栈中看不到OWIN管道。显然,ASP.NET是在一个单独的调用上下文中进行控制器调用。

所以,

  • ASP.NET为什么(以及如何)将调用上下文从OWIN管道隔离到控制器
    • 我可以将上下文数据从管道传递到控制器吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-23 21:36:23

我花了几天时间才弄明白为什么API控制器中的CallContext是清晰的,直到我读到这篇文章:http://www.asp.net/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline

如果两个中间件运行在不同的IIS阶段,它们将具有不同的CallContext。

如果您在IIS上托管OWIN,并且希望在所有中间件中使用相同的请求上下文,那么,请使用旧的HttpContext.Current

票数 11
EN

Stack Overflow用户

发布于 2016-03-26 14:31:32

我不太确定您将上下文数据从管道传递到控制器是什么意思,但是如果您已经使用了Microsoft.AspNet.Identity,,那么您可以利用IAppBuilder.CreatePerOwinContext来将对象注册到管道。

当我想通过Owin Pipeline将上下文对象传递给WebApi控制器时,我经常这样做:

startup.cs

代码语言:javascript
复制
//Registration of a delegate factory
 app.CreatePerOwinContext<Foo>(Factory.CreateFoo);

factory.cs

代码语言:javascript
复制
//Contextual Object
public static Foo CreateFoo(IdentityFactoryOptions<Foo> options, IOwinContext context)
    {
      //Owin Context is available here
    }

controller.cs

代码语言:javascript
复制
 public FooController()
    {
        var fooObj= HttpContext.Current.GetOwinContext().Get<Foo>();
    }

希望它能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29194836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档