【问题标题】:Encryption/Decryption through DelegatingChannel (MessageHandler)通过 DelegatingChannel (MessageHandler) 加解密
【发布时间】:2011-08-24 19:41:46
【问题描述】:

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

【问题讨论】:

    标签: c# wcf wcf-web-api


    【解决方案1】:

    如果我没记错的话,你可以尝试实现 DecryptOperationHandler : HttpOperationHandler,

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

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

    【讨论】:

    • 谢谢亚历克斯。我曾尝试使用通用 HttpOperationHandler,但我未能使用基类或接口(想象我有一堆模型需要加密和解密)。而且我不确定如何使用非泛型 HttpOperationHandler
    • [WebInvoke(Method = "POST", UriTemplate = "")]public void UpdateSomthing(Something something){ ... } 是操作的样子。如上所述,在执行此操作之前,应进行解密,并将存储在 Message.Data 中的 json 字符串转换为 Something。但是我没有通过消息处理程序来做。
    • 您的消息处理程序是什么样的?请看一下我在这篇文章中写的JsonpResponseHandler:blog.alexonasp.net/post/2011/07/26/…
    • 感谢 Alex,我终于解决了问题。这是实现。 misaxionsoftware.wordpress.com/2011/07/29/…
    猜你喜欢
    • 2019-08-28
    • 1970-01-01
    • 2012-12-06
    • 2019-07-18
    • 1970-01-01
    • 2020-05-01
    • 2020-08-11
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多