C# 限制RestSharp中的下载大小
我们正在使用RestSharp v105.2.3 是否有一种方法可以在收到N个字节后停止接收响应,其中N是我可以控制的参数C# 限制RestSharp中的下载大小,c#,restsharp,C#,Restsharp,我们正在使用RestSharp v105.2.3 是否有一种方法可以在收到N个字节后停止接收响应,其中N是我可以控制的参数 编辑:下面是我根据贝林的答案给出的完整解决方案 public static class IRestClientExtensions { public static IRestResponse Execute(this IRestClient client, IRestRequest request, byte[] buffer, out int bufferSiz
编辑:下面是我根据贝林的答案给出的完整解决方案
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;
}
}
公共静态类IRestClientExtensions
{
公共静态IRestResponse执行(此IRestClient客户端,IRestRequest请求,字节[]缓冲区,out int bufferSize)
{
var totalBytesRead=0;
request.ResponseWriter=stream=>
{
while(totalBytesRead
单元测试(使用NUnit):
[TestFixture]
公共类IRestClientExtensionsTests
{
[测试,明确]
public void Execute_OutputBufferTooSmall()
{
var client=新的RestClient(“https://www.w3.org/TR/html4/charset.html");
var request=new RestRequest();
var buffer=新字节[4*1024];
int缓冲区大小;
var response=client.Execute(请求、缓冲区、输出缓冲区大小);
AreEqual(HttpStatusCode.OK,response.StatusCode);
IsTrue(string.IsNullOrEmpty(response.Content));
Assert.AreEqual(buffer.Length,bufferSize);
}
[测试,明确]
public void Execute_OutputBufferLargeEnough()
{
var client=新的RestClient(“https://www.w3.org/TR/html4/charset.html");
var request=new RestRequest();
var buffer=新字节[256*1024];
int缓冲区大小;
var response=client.Execute(请求、缓冲区、输出缓冲区大小);
AreEqual(HttpStatusCode.OK,response.StatusCode);
IsTrue(string.IsNullOrEmpty(response.Content));
IsTrue(bufferSize
我相信有一种方法,但是您失去了Response
自动提取数据并反序列化数据的能力。我相信这个用例更适合于从云中提取blob:
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.
var client=new RestClient(“http://example.com");
var request=new RestRequest(“resource/{id}”,Method.POST);
request.ResponseWriter=(流)=>{
//与你在这里收到的作者合作。
//这是一个动作回调
};
//注意:在此语句期间调用回调:
IRestResponse response=client.Execute(请求);
//响应包含所有元信息,但没有任何数据。
ResponseWriter
属性是一个Action
回调。读取HTTP响应的代码要么调用ResponseWriter
(如果提供),要么一次读取所有字节并填充response.RawBytes
属性
你必须选择你想要的行为
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.