zoukankan      html  css  js  c++  java
  • 在Owin SelfHosing下实现每个请求中共享上下文(数据)

    问题


    这几天在做公司的外部WebApi网关,由于使用了OAuth2.0,所以不得不使用Owin来部署网关。

    而涉及到请求上下文的问题,为了使业务层能获取到请求头的信息,又不与网关耦合,决定把请求信息写到一个访问上下文中。

    在传统的Http部署下,这个问题很好解决,我们可以使用HttpContext或者Session。

    然而在Owin的Self-Hosting情况下,这两者都无法使用。

    虽然可以自己包装一下CallContext来解决这个问题,但不想重复造轮子。

    于是在网上检索了一下,找到了很完善的解决方法。记录分享一下。

    解决方案


     方法一:

    使用OwinContext

    在你的中间件中添加如下代码

    public class HelloWorldMiddleware : OwinMiddleware
    {
       public HelloWorldMiddleware (OwinMiddleware next) : base(next) { }
    
       public override async Task Invoke(IOwinContext context)
       {   
           context.Set("Hello", "World");
           await Next.Invoke(context);     
       }   
    }

    在MVC或Webapi中使用:

    Request.GetOwinContext().Get<string>("Hello");

    方法2:

    使用 OwinRequestScopeContext,这是GitHub上的一个开源项目,看了下源码,其实就是简单地包装了一下CallContxt 。

    在使用前记得先上Nuget安装一下。

    1,在Startup中添加,请保持它在最上层以最先激活。

    app.UseRequestScopeContext();

    2,在程序中加入参数

    OwinRequestScopeContext.Current.Items["myclient"] = new Client();

    3,然后可以在任何地方调用它了

    var currentClient = OwinRequestScopeContext.Current.Items["myclient"] as Client;

    参考的StackOverflow源地址:这里

    欢迎转载,注明出处即可。 如果你觉得这篇博文帮助到你了,请点下右下角的推荐让更多人看到它。
  • 相关阅读:
    Codevs P1501二叉树的最大宽度和高度
    react 脚手架使用
    vue 学习七 组件上使用插槽
    vue 学习 cli3常用配置
    vue 学习五 深入了解components(父子组件之间的传值)
    vue 学习四 了解组件
    vue 学习二 深入vue双向绑定原理
    vue 学习一 组件生命周期
    vscode 常用插件
    解决在移动端上 click事件延迟300 毫秒的问题 fastclick.js
  • 原文地址:https://www.cnblogs.com/RobotZero/p/6428167.html
Copyright © 2011-2022 走看看