使用 DefaultHttpContext 适合消费事件吗?

问题描述 投票:0回答:0

我们有一个名为 IContext 的接口,它基本上是 IHttpContextAccessor 的抽象,能够从请求标头中获取令牌和声明。因此我们可以从每个 http 请求中得到我们想要的任何声明。到目前为止一切都很好,但是当我们从 rabbitmq 消费事件时,因为它不是 http 请求,没有 HttpContext(null) 也没有标头,所以我们需要在事件消息中传递令牌,当我们消费消息时,我们需要传递再次标记其他方法,因为在这些方法中可以使用 http 请求,我们必须添加令牌请求标头。

所以我真的不想在每个方法中都将令牌作为参数传递,我希望能够通过 IContext 接口获取令牌或声明。

我尝试在消费事件时创建一个 DefaultHttpContext 实例。我将能够将通过事件发送的令牌添加到上下文标头,并且 IContext 接口将能够通过 IHttpContextAccessor 获取令牌。

        public async Task Consume(ConsumeContext<T> context)
        {
            var defaultHttpContext = new DefaultHttpContext();

            _httpContextAccessor.HttpContext = defaultHttpContext;
            _httpContextAccessor.HttpContext.Request.Headers.Add("Authorization", "Bearer token");

            _context = context;

            try
            {
                await Consume(context.Message, context.CancellationToken);
            }
            catch (Exception ex)
            {
               
                throw ex;
            }
        }

我通常在单元测试中看到 DefaultHttpContext,老实说,我的解决方案并不令我满意,因为创建 HttpContext 对象可能会导致性能下降,而我不知道。

任何建议或建议都很好,谢谢

c# .net events httpcontext
© www.soinside.com 2019 - 2024. All rights reserved.