通过DelegatingChannel加密/解密(MessageHandler)

时间:2011-07-27 13:15:35

标签: c# wcf wcf-web-api

我正在尝试使用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的读取对象存在困难。

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

非常感谢, 中号

1 个答案:

答案 0 :(得分:0)

如果我没错,你可以尝试实现DecryptOperationHandler:HttpOperationHandler&lt; HttpRequestMessage&gt;,&lt; HttpRequestMessage&gt;

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

可以使用EncryptOperationHandler进行加密:HttpOperationHandler&lt; HttpResponseMessage&gt;,&lt; HttpResponseMessage&gt;在执行资源方法后执行