通过DelegatingChannel (MessageHandler)进行加密/解密

本文关键字:加密 解密 DelegatingChannel MessageHandler 通过 | 更新日期: 2023-09-27 18:03:47

我正在尝试使用DelegatingChannel (MessageHandler)来解密传入消息并加密传出消息。代码看起来像这样,但是有一些占位符,我不知道如何实现。

    protected override Task<HttpResponseMessage> SendAsync(
    HttpRequestMessage request, CancellationToken cancellationToken)
{
    var inEncryptedMessage = request.Content.ReadAsOrDefault<EncryptedMessage>();
    Message inMessage = inEncryptedMessage.Decrypt();
    var newContent = new StringContent(inMessage.Data, Encoding.UTF8, "text/json");
    newContent.Headers.ContentType = request.Content.Headers.ContentType;
    request.Content = newContent;            
    return base.SendAsync(request, cancellationToken).ContinueWith(
        task =>
        {
            HttpResponseMessage response = task.Result;
            // need to serialize the data in response.Content as json
            var outMessage = new Message {
                Data = ... // but don't know how
            };
            var outEncryptedMessage = outMessage.Encrypt();
            response.Content = new ObjectContent(outEncryptedMessage);
            return response;
        });
}

public class Message
{
    public string Data { get; set; }
}
public class EncryptedMessage
{
    public byte[] Key { get; set; }
    public byte[] Message { get; set; }
}

我想在请求中传递JSON字符串到操作,并在其中将JSON反序列化为对象。但是失败了……但是对象已经创建了,但是所有属性都是空的

这让我停止思考响应方面的问题。但是我还是发现从response.Content中读取对象比较困难。

如果你有答案,请给我一些建议。

非常感谢。M

通过DelegatingChannel (MessageHandler)进行加密/解密

如果我没有错,你可以尝试实现一个DecryptOperationHandler: HttpOperationHandler

这应该在传入消息传递给资源本身之前对其进行解密

加密可以使用EncryptOperationHandler: HttpOperationHandler<在资源方法执行后执行>