c# - 如何在 .NET Core 中逐行下载文件?

标签 c# .net-core

我曾尝试使用 HttpWebResponse.GetResponse(); 但这不是 .NET 核心的一部分,我想不出其他任何东西。

到目前为止我只有这个,但这会下载整个文件

string first_line(string url)
{
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("MyClient", "1.0"));
    var otp = httpClient.GetStringAsync(url);

    return imaginary_first_line;
}

我想只下载第一行而不下载文件的其余部分。

最佳答案

解决方案是使用Range header 。它说我们只对文件的一部分感兴趣的服务器。这是一个仅下载 50 个字节的示例:

using (var client = new HttpClient())
{
   var request = new HttpRequestMessage(HttpMethod.Get, url);
   //Let's read only 50 bytes
   request.Headers.Range = new RangeHeaderValue(0, 50);

   using (var response = await client.SendAsync(request))
      using (var stream= await response.Content.ReadAsStreamAsync())
      {
         //The buffer can store 1000 bytes but only 50 will be send from the server
         var buffer = new byte[1000];
         stream.Read(buffer, 0, 1000);
         //...
      }
}

您可以使用 Fiddler 检查服务器是否真的只返回 50 个字节。

您还可以按以下方式使用 HttpWebRequest 类:

var request = (HttpWebRequest)WebRequest.Create(url);
request.Headers[HttpRequestHeader.Range] = "bytes=0-50";

var response = await request.GetResponseAsync();
//...

结果应该是一样的。

关于c# - 如何在 .NET Core 中逐行下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40648914/

相关文章:

c# - 应用程序日志记录 Azure Web 应用程序的最佳实践?

c# - 如何在复杂的 simpleDb 实体上实现 CRUD

c# - .NET Core项目中 `wwwroot`文件夹的图标怎么改?

c# - InvalidOperationException:未指定 key 类型。 Microsoft.AspNetCore.ApiAuthorization.IdentityServer.ConfigureSigningCredentials.LoadKey()

c# - 请求的身份验证范围不足。 [403]。谷歌人员API

c# - ParallelQuery 核心平衡

c# - 模拟 HttpMessageHandler 时未调用 SendAsync

c# - SignalR 未序列化/反序列化自定义 DataMember 名称

C# DotNet 核心中间件包装响应

c# - RegisterWaitForSingleObject 与 System.Timers