使用中间件

时间:2016-11-21 14:32:19

标签: c# rabbitmq masstransit

在消息消费期间,有没有办法在中间件中修改消息的标头? 我可以看到ConsumeContext上的Headers接口没有提供任何设置头的方法,还有其他方法可以实现吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

您无法在使用中间件时添加标头,但是,您可以将有效负载添加到可在管道中其他位置使用的上下文中。

例如,如果您有AuthorizationContext上下文,则可以将其添加到中间件组件中的有效内容中:

public Task Send(ConsumeContext context, IPipe<ConsumeContext> next)
{
    context.GetOrAddPayload(() => CreateAuthorizationContext());

    return next.Send(context);
}

然后,上下文的另一个组件或用户可以访问它:

public Task Consume(ConsumeContext<MyMessage> context)
{
    var authorizationContext = context.GetPayload<AuthorizationContext>();

    if(authorizationContext.IsAdmin)
        return UpdateSomething(context);

    throw new NotAuthorizationException("Booo!");
}