如何使用C#HttpClient下载大文件的一部分
如何使用C#HttpClient下载大型文件的一部分,如HttpWebRequest.AddRange(123)如何使用C#HttpClient下载大文件的一部分,c#,download,httpclient,addrange,C#,Download,Httpclient,Addrange,如何使用C#HttpClient下载大型文件的一部分,如HttpWebRequest.AddRange(123) HTTP协议中为此指定了一个范围头: 范围HTTP请求标头指示服务器应返回的文档部分。[…]服务器还可以忽略范围标头并返回带有200状态代码的整个文档。(,强调我的) 因此,您不能依赖服务器仅返回该文件范围 但是,在HttpRequest中,在HttpRequestHeaders中有一个用于设置请求的范围 private async Task GetAsync(字符串下载URL, i
HTTP协议中为此指定了一个
范围
头:
范围HTTP请求标头指示服务器应返回的文档部分。[…]服务器还可以忽略范围标头并返回带有200状态代码的整个文档。(,强调我的)
因此,您不能依赖服务器仅返回该文件范围
但是,在HttpRequest
中,在HttpRequestHeaders
中有一个用于设置请求的范围
private async Task GetAsync(字符串下载URL,
int rangeStart,
整数范围(完)
{
//注意:C#8,使用具有较旧语言规范的using块
使用var request=newhttprequestmessage
{
RequestUri=新Uri(donloadUrl),
Method=HttpMethod.Get
};
request.Headers.Range=新的RangeHeaderValue(rangeStart,rangeEnd);
返回wait\u httpClient.SendRequestAsync(请求);
}
HTTP协议中为此指定了一个范围
头:
范围HTTP请求标头指示服务器应返回的文档部分。[…]服务器还可以忽略范围标头并返回带有200状态代码的整个文档。(,强调我的)
因此,您不能依赖服务器仅返回该文件范围
但是,在HttpRequest
中,在HttpRequestHeaders
中有一个用于设置请求的范围
private async Task GetAsync(字符串下载URL,
int rangeStart,
整数范围(完)
{
//注意:C#8,使用具有较旧语言规范的using块
使用var request=newhttprequestmessage
{
RequestUri=新Uri(donloadUrl),
Method=HttpMethod.Get
};
request.Headers.Range=新的RangeHeaderValue(rangeStart,rangeEnd);
返回wait\u httpClient.SendRequestAsync(请求);
}
public async void StartDownload(CancellationToken cancellationToken)
{
try
{
if (_isWork)
return;
_isWork = true;
using (var response = await GetAsync(_doenloadUrl, HttpCompletionOption.ResponseHeadersRead, cancellationToken))
await DownloadFileFromHttpResponseMessage(response);
}
catch (Exception e)
{
downloadExceptiondHandler?.Invoke(_doenloadUrl, e);
}
}