Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#HttpClient下载大文件的一部分_C#_Download_Httpclient_Addrange - Fatal编程技术网

如何使用C#HttpClient下载大文件的一部分

如何使用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

如何使用C#HttpClient下载大型文件的一部分,如HttpWebRequest.AddRange(123)


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