2012-09-11 3 views
1

서버에서 사용자 지정 메시지 처리기로 압축을 수행합니다. 핸들러는 Accept-Encoding 헤더를 확인하고 지원되는 경우 (예 : GZip) CompressedContent 인스턴스로 HttpResponseMessage.Content을 스왑합니다.HttpClient가 사용자 지정 HttpContent 유형을 읽는 중

protected async override Task SerializeToStreamAsync(Stream stream, TransportContext context) 
{ 
    Ensure.Argument.NotNull(stream, "stream"); 

    using (content) 
    { 
     var compressed = await content.ReadAsStreamAsync(); 
     var decompressed = GetStream(CompressionMode.Decompress, compressed); 
     await decompressed.CopyToAsync(stream); 
     decompressed.Dispose(); 
    } 
} 

파트 I :

클라이언트에
protected override async Task SerializeToStreamAsync(Stream stream, TransportContext context) 
{ 
    Ensure.Argument.NotNull(stream, "stream"); 

    using (content) // original content 
    { 
     // creates a new GZip/Deflate stream 
     var compressed = GetStream(CompressionMode.Compress, stream); 
     await content.CopyToAsync(compressed); 
     compressed.Dispose(); 
    } 
} 

, 우리는 Content-Encoding 헤더를 확인하고 압축 해제를 수행하는 다른 HttpContent 형식을 사용하여 압축 해제를 달성 할 수있다 : 이것은 단순히 때문에 같은 원본 콘텐츠를 압축 감압을 수행하기 위해 사용자 정의 HttpContent 유형을 사용해야하는지 여부가 확실하지 않습니다. 서버에서는 응답 스트림을 만지는 다른 방법이 없기 때문에이 작업을 수행하는 것이 좋습니다. 그러나 클라이언트에서는 표준 StreamContent을 직접 압축 해제하거나 사용자 정의 HttpClient 구현으로도 압축을 풀 수 있습니다.

+0

필립의 제안에 따라 클라이언트에서 처리기를 사용하고 http://ben.onfabrik.com/posts/aspnet-web-api-compression에서 블로깅했습니다. –

답변

2

HttpClient과 함께 클라이언트에서 메시지 핸들러를 사용하여 요청/응답을 처리 할 수 ​​있습니다. 귀하의 경우 서버에서 일어나는 일에 역 과정을 제공하는 것이 유용 할 것입니다.

이것은 ASP.NET 웹 API의 대칭입니다.

또 다른 예 http://byterot.blogspot.ch/2012/06/aspnet-web-api-client-delegating.html는 헨릭의 블로그에, 여기에서 찾을 수 있습니다 - -

클라이언트 측 메시지 핸들러에 좋은 기사는 여기가 (베타에 대한) 조금 오래된,하지만 요점은 여전히 ​​동일합니다 : http://blogs.msdn.com/b/henrikn/archive/2012/02/16/extending-httpclient-with-oauth-to-access-twitter.aspx

관련 문제