2017-01-17 16 views

回答

0

您可以使用委派處理

public class ContentHandler : DelegatingHandler 
{ 
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>((responseToCompleteTask) => 
     { 
      HttpResponseMessage response = responseToCompleteTask.Result; 
      var YourContent = response.Content.ReadAsStreamAsync().Result; 
      response.Content = new CompressedContent(response.Content, acceptedEncoding); 
      return response; 
     }, 
     TaskContinuationOptions.OnlyOnRanToCompletion); 
    } 
} 

在WebApiConfig

GlobalConfiguration.Configuration.MessageHandlers.Add(new ContentHandler()); 

註冊您處理,您可以通過擴展HttpContent類編輯內容效應初探。 例如要壓縮內容

public class CompressedContent : HttpContent 
{ 
    private HttpContent originalContent; 

    protected override bool TryComputeLength(out long length) 
    { 
     length = -1; 

     return false; 
    } 

    protected override Task SerializeToStreamAsync(Stream stream, TransportContext context) 
    { 
     Stream editedStream = null; 

     if (encodingType == "gzip") 
     { 
      editedStream = new GZipStream(stream, CompressionMode.Compress, leaveOpen: true); 
     } 
     else if (encodingType == "deflate") 
     { 
      editedStream = new DeflateStream(stream, CompressionMode.Compress, leaveOpen: true); 
     } 

     return originalContent.CopyToAsync(editedStream).ContinueWith(tsk => 
     { 
      if (editedStream != null) 
      { 
       editedStream.Dispose(); 
      } 
     }); 
    } 
}