【发布时间】:2014-10-13 20:57:35
【问题描述】:
问题
我在自托管的 OWIN/Katana Web API OData 4 服务中添加了对 http 压缩的支持,但我看不到如何在 .NET 客户端中支持压缩。我正在使用 OData 库 v6.5.0,我需要支持客户端中的压缩/解压缩 (OData v4 Client Code Generator)。我正在使用 Deflate 编码通过 ActionFilter 进行压缩。正如通过 Fiddler 确认的那样,所有内容都在服务器上正确压缩,但我不知道如何配置客户端以支持这一点,因为 OData 客户端使用请求和响应管道而不是现在已失效的 WritingRequest and RecievingResponse events that once supported this very scenario。
尝试
通过实验,我发现我可以在DataServiceContext 上挂接ReceivingResponse 事件,然后调用 ReceivingResponseEventArgs.ResponseMessage.GetStream() 但我不知道如何正确覆盖消息内容。如果我在流上 CopyTo(),我会在 Microsoft.OData.Core.ODataMessageReader.DetectPayloadKind() 处获得空引用异常。我认为这是因为流被读取到末尾并且位置需要设置回零,但我不能这样做,因为流在设置位置时也会引发异常,因为它说它不支持搜索。我认为这仅仅是因为流是只读的。即使我可以复制流以成功解压,如何使用解压后的内容修改响应消息内容?我在 RequestPipeline 或 ResponsePipeline 中根本看不到任何挂钩。为了澄清,我想解压缩响应消息内容,然后将其设置为稍后发生的具体化,我该怎么做?如何将压缩请求也发送到 OData 服务的额外功劳。谢谢!
【问题讨论】:
标签: odata wcf-data-services asp.net-web-api astoria wcf-data-services-client