public async Task Send(PublishContext <T> context, IPipe <PublishContext <T> > next) { if (context.Message is PublishMessage publishMessage) { var secretKey = publishMessage.SecretKey; if (secretKey != null && TryGetDecryptParameter(publishMessage, out var decryptFormat)) { var encryptedMessage = EncryptedMessage.CreateFromBase(publishMessage.Message); var decryptedResponse = await _decryptMessageClient.GetResponse <DecryptedMessage>(new { EncryptedMessage = encryptedMessage, SecretKey = secretKey }); if (decryptFormat != null) { var formattedResponse = await _formatMessageClient.GetResponse <FormattedMessage, DummyResponse>(new { DecryptedMessage = decryptedResponse.Message, Format = decryptFormat }); if (formattedResponse.Is(out Response <FormattedMessage> response)) { publishMessage.Message = response.Message; } else { publishMessage.Message = decryptedResponse.Message; } } else { publishMessage.Message = decryptedResponse.Message; } context.AddOrUpdatePayload(() => publishMessage, _ => publishMessage); } } await next.Send(context); }