根据请求范围自动向消息添加自定义标头

时间:2021-04-07 18:08:34

标签: .net-core masstransit

我的 ApiGateway 中的 RequestClient 被注入(使用默认 MS DI)HTTP 请求处理程序(在这些处理程序中我可以访问当前请求范围)。我想要的是为每个 RequestClient 自动添加自定义消息标头,我可以在其中放置来自请求范围的一些数据。用例是从请求中获取 JWT 并将其作为自定义标头添加到消息中。然后在消费者方面,我需要,对于每个收到的请求,检查自定义标头,验证 JWT,并将其中的一些数据添加到消耗的请求范围,以便我可以访问例如 IUserContext 或类似的东西。例如,我想避免手动将 jwt 添加到消息合同中。

如何在客户端和消费者端配置 MassTransit 以实现我想要的?我已经阅读了关于中间件、管道和观察者的文档,但我仍然无法弄清楚......

使用 RabbitMQ 传输。

1 个答案:

答案 0 :(得分:1)

因此,将其放入帖子中非常复杂,因此我created a complete sample 展示了如何使用 MassTransit Scoped Filters。

在此示例中,向控制器注册了一个操作过滤器,以自动提取 do { let encodedData = try JSONEncoder().encode(myStructures) UserDefaults.standard.set(encodedData, forKey: "array") if let decodedData = UserDefaults.standard.data(forKey: "array") { let decodedArray = try JSONDecoder().decode([MyStruct].self, from: decodedData) print(decodedArray) } } catch { print(error) } 标头并存储它,以便在从控制器发布或发送消息时可以使用它。 MassTransit 过滤器配置在总线上,因此它们可用于所有接收端点。