0

我正在尝试使用 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

4

1 回答 1

0

如果我没记错,您可以尝试实现 DecryptOperationHandler : HttpOperationHandler<HttpRequestMessage>, <HttpRequestMessage>

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

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

于 2011-07-27T18:59:48.233 回答