我正在尝试使用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字符串传递给Operation,并在其中将JSON反序列化为对象。但失败了...但是对象已经创建,但所有属性都是null。
所以这让我想到了回应方面。但我仍然发现来自response.Content的读取对象存在困难。
如果你有答案,请给我一些建议。
非常感谢, 中号
答案 0 :(得分:0)
如果我没错,你可以尝试实现DecryptOperationHandler:HttpOperationHandler&lt; HttpRequestMessage&gt;,&lt; HttpRequestMessage&gt;
这应该在将传入的消息传递给资源本身之前对其进行解密
可以使用EncryptOperationHandler进行加密:HttpOperationHandler&lt; HttpResponseMessage&gt;,&lt; HttpResponseMessage&gt;在执行资源方法后执行