2016-05-19 3 views
1

RestSharp v105.2.3を使用しています。RestSharpのダウンロードサイズを制限する

Nバイトを受信した後に応答を受信しないようにする方法はありますか?Nは制御できるパラメータですか?


編集:ここで私の完全な解決策は、下のベリンの答えに基づいています。 (NUnitのを使用して)

public static class IRestClientExtensions 
{ 
    public static IRestResponse Execute(this IRestClient client, IRestRequest request, byte[] buffer, out int bufferSize) 
    { 
     var totalBytesRead = 0; 

     request.ResponseWriter = stream => 
     { 
      while (totalBytesRead < buffer.Length) 
      { 
       var bytesRead = stream.Read(buffer, totalBytesRead, buffer.Length - totalBytesRead); 
       if (bytesRead == 0) 
       { 
        break; 
       } 

       totalBytesRead += bytesRead; 
      } 
     }; 

     var response = client.Execute(request); 

     bufferSize = totalBytesRead; 
     return response; 
    } 
} 

ユニットテスト:

[TestFixture] 
public class IRestClientExtensionsTests 
{ 
    [Test, Explicit] 
    public void Execute_OutputBufferTooSmall() 
    { 
     var client = new RestClient("https://www.w3.org/TR/html4/charset.html"); 
     var request = new RestRequest(); 

     var buffer = new byte[4 * 1024]; 
     int bufferSize; 
     var response = client.Execute(request, buffer, out bufferSize); 

     Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); 
     Assert.IsTrue(string.IsNullOrEmpty(response.Content)); 
     Assert.AreEqual(buffer.Length, bufferSize); 
    } 

    [Test, Explicit] 
    public void Execute_OutputBufferLargeEnough() 
    { 
     var client = new RestClient("https://www.w3.org/TR/html4/charset.html"); 
     var request = new RestRequest(); 

     var buffer = new byte[256 * 1024]; 
     int bufferSize; 
     var response = client.Execute(request, buffer, out bufferSize); 

     Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); 
     Assert.IsTrue(string.IsNullOrEmpty(response.Content)); 
     Assert.IsTrue(bufferSize < buffer.Length); 
    } 
} 

答えて

2

私は方法があると信じていますが、データを取得し、自動的にそれをデシリアライズするRestResponseの能力を失います。私は、ユースケースは、クラウドからブロブを引っ張るよりあると信じて:

var client = new RestClient("http://example.com"); 
var request = new RestRequest("resource/{id}", Method.POST); 

request.ResponseWriter = (stream) => { 
    // work with the writer you recieve here. 
    // This is an Action<Stream> callback 
}; 

// NOTE: the callback is invoked during this statement: 
IRestResponse response = client.Execute(request); 

// The response has all the meta information, but none of the data. 

ResponseWriterプロパティがAction<Stream>コールバックです。 HTTP応答を読み取るコードは、提供されている場合はResponseWriterを呼び出すか、またはすべてのバイトを一度に読み取ってResponse.RawBytesプロパティを設定します。

必要な動作を選択する必要があります。

関連する問題