通过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
如果我没有错,你可以尝试实现一个DecryptOperationHandler: HttpOperationHandler
这应该在传入消息传递给资源本身之前对其进行解密
加密可以使用EncryptOperationHandler: HttpOperationHandler