2017-01-17 4 views
0

C#/ ASP.netのHttpResponseオブジェクトのコンテンツをどのように読んでいますか?C#/ ASP.NETでHttpResponseオブジェクトのボディコンテンツをどのように読むのですか?

本文のコンテンツをJSONオブジェクトとして読み取って変更し、応答出力ストリームに書き戻す必要があります。私はストリームに既にあるものを失わないようにしたいので、まずそれを読む必要があります。

どうすればよいですか?

+1

これを処理するコードを作成しようとしましたか? – McStuffins

答えて

0

はあなたがHttpContentクラスを拡張することで、あなたのREPONSEの内容を編集することができますWebApiConfig

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

であなたのハンドラを登録委任ハンドラ

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); 
    } 
} 

を使用することができます。 たとえば、コンテンツを圧縮する場合

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(); 
      } 
     }); 
    } 
} 
関連する問題