将数据传递到更下游的中间件
Posted
技术标签:
【中文标题】将数据传递到更下游的中间件【英文标题】:Pass data to middleware further down the chain 【发布时间】:2016-12-16 10:04:41 【问题描述】:当我将中间件注册为请求管道的一部分时,如何通过中间件链传递数据。 (最终可在 MVC 控制器操作中访问)
例如,我已经实现了自定义中间件来验证我的请求,但是我如何才能将身份验证数据(例如身份验证结果和附加数据)传递到中间件链 - 最终希望从MVC 控制器操作,以及自定义 MVC 操作过滤器,用于根据身份验证结果限制访问。
我可以在任何地方存储每个请求的自定义数据,然后在请求链中访问它吗?
【问题讨论】:
如果您想向当前委托人添加额外的声明(据我了解您的示例),您可以使用Claims Transformation
。
【参考方案1】:
您可以使用HttpContext.Items
集合来存储请求生命周期内的数据。它的主要用例是在组件(例如中间件和控制器)周围传递数据。添加和阅读项目很容易:
写:
context.Items["AuthData"] = authData;
阅读:
var authData = (AuthData)context.Items["AuthData"];
请参阅ASP.NET docs 了解更多信息。
【讨论】:
我知道它存在,只是找不到。谢谢:)【参考方案2】:您可以将自定义数据存储在IOwinContext 对象中。 IOwinContext 对象可以通过中间件的 Invoke 函数访问。
设置
context.Set<T>("key", obj);
获取
var obj = context.Get<T>("key");
【讨论】:
以上是关于将数据传递到更下游的中间件的主要内容,如果未能解决你的问题,请参考以下文章
Gitlab ci问题将工件传递到带有触发器和需要关键字的下游管道
带有 NuxtJS 中间件的 ExpressJS 将发布数据传递到页面