问题
我在我们的自托管 OWIN/Katana Web API OData 4 服务中添加了对 http 压缩的支持,但我看不到如何在 .NET 客户端中支持压缩。我正在使用 OData 库 v6.5.0,我需要在客户端(OData v4 客户端代码生成器)中支持压缩/解压缩。我正在通过 ActionFilter 使用 Deflate 编码进行压缩。正如通过 Fiddler 确认的那样,一切都在服务器上正确压缩,但我不知道如何配置客户端以支持这一点,因为 OData 客户端使用请求和响应管道,而不是曾经支持这种场景的现已失效的 WritingRequest 和 RecievingResponse 事件。
尝试
通过实验,我发现我可以ReceivingResponse
在我的DataServiceContext
然后调用 ReceivingResponseEventArgs.ResponseMessage.GetStream() 但我不知道如何正确覆盖消息内容。如果我在流上 CopyTo(),我会在 Microsoft.OData.Core.ODataMessageReader.DetectPayloadKind() 处获得空引用异常。我认为这是因为流被读取到末尾并且位置需要设置回零,但我不能这样做,因为流在设置位置时也会引发异常,因为它说它不支持搜索。我认为这仅仅是因为流是只读的。即使我可以复制流以成功解压,如何使用解压后的内容修改响应消息内容?我在 RequestPipeline 或 ResponsePipeline 中根本看不到任何挂钩。澄清,我想将响应消息内容解压,然后设置为稍后发生的具体化,我该怎么做?如何将压缩请求也发送到 OData 服务的额外功劳。谢谢!