将数据传递到更下游的中间件

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 将发布数据传递到页面

如何将管道中的布尔参数值传递给下游作业?

如何将数据从中间件传递到处理程序?

如何将数据从 express 中间件直接传递回客户端 JWT 和 Express 中间件

如何将数据从顶点着色器传递到片段着色器,中间有着色器[重复]