将数据传递到链中的中间件

时间:2016-08-10 07:00:25

标签: c# asp.net-core middleware

当我将中间件注册为请求管道的一部分时,如何通过中间件链传递数据。 (最终可以通过MVC控制器操作访问)

例如,我已经实现了自定义中间件来验证我的请求,但是如何在中间件链中传递身份验证数据(例如身份验证和其他数据的结果) - 最终希望从中间件访问数据MVC控制器操作,以及自定义MVC操作过滤器,用于根据身份验证结果限制访问。

我可以在任何地方根据请求存储自定义数据,并在以后的请求链中访问它吗?

2 个答案:

答案 0 :(得分:16)

您可以使用HttpContext.Items集合存储请求生命周期内的数据。它的主要用例是围绕组件传递数据(例如中间件和控制器)。添加和阅读项目很简单:

写:

context.Items["AuthData"] = authData;

阅读:

var authData = (AuthData)context.Items["AuthData"];

有关详细信息,请参阅ASP.NET docs

答案 1 :(得分:2)

您可以在IOwinContext对象中存储自定义数据。可以从中间件的Invoke函数访问IOwinContext对象。

context.Set<T>("key", obj);

获取

var obj = context.Get<T>("key");