0

問題

自己ホスト型の OWIN/Katana Web API OData 4 サービスに http 圧縮のサポートを追加しましたが、.NET クライアントで圧縮をサポートする方法がわかりません。OData ライブラリ v6.5.0 を使用しており、クライアントで圧縮/解凍をサポートする必要があります ( OData v4 Client Code Generator )。ActionFilter による圧縮に Deflate エンコーディングを使用しています。Fiddler で確認されたように、すべてがサーバー上で正しく圧縮されますが、これをサポートするようにクライアントを構成する方法がわかりません。これは、OData クライアントが、かつてこの非常にシナリオをサポートしていた今は機能していない WritingRequest および RecbeingResponse イベントの代わりに、要求および応答パイプラインを使用するためです。

試み

ReceivingResponse実験により、私は自分のイベントにフックできることを発見しましたDataServiceContext次に、 RecomingResponseEventArgs.ResponseMessage.GetStream() を呼び出しますが、メッセージの内容を正しく上書きするために何をすべきかわかりません。ストリームで CopyTo() を実行すると、Microsoft.OData.Core.ODataMessageReader.DetectPayloadKind() で null 参照例外が発生します。これは、ストリームが最後まで読み取られ、位置をゼロに戻す必要があるためだと思いますが、シークをサポートしていないため、位置を戻すときにストリームも例外をスローするため、それはできません。これは単にストリームが読み取り専用であることが原因だと思います。ストリームをコピーして正常に解凍できたとしても、解凍されたコンテンツで応答メッセージのコンテンツを変更するにはどうすればよいですか? RequestPipeline または ResponsePipeline には、このためのフックがまったく表示されません。明確にするために、応答メッセージのコンテンツを解凍し、その後すぐに発生する実体化のために設定したいのですが、どうすればよいですか? 圧縮されたリクエストを OData サービスに送信する方法についても追加クレジット。ありがとう!

4

1 に答える 1