如何使用httpclient指定下载文件的目的地

How do I specify the destination to download the file using httpclient

我需要将此 PS cmdlet 转换为 C#

invoke-webrequest -uri [uri] -method GET -headers [myHeader] -outfile  [myFile]

其中 [uri] 是下载 link,[myHeader] 包含我的 apikey,我的 outfile 是目标文件的名称。

PS 中的 invoke-webrequest 有效,但我的项目需要 C# 代码。如果我处理的是标准 json:

,我可以将以下代码用于正常的 get 或 post 操作
        var msg = new HttpRequestMessage(HttpMethod.Get, [uri]);
        msg.Headers.Add(_apiKeyTag, _myKey);
        var resp = await _httpClient.SendAsync(msg);

假设 _httpClient 是由新的 HttpClient 创建的,并且假设下载 link [uri] 存在。要下载的文件可以是 pdf、jpg、img 或 csv 文件。 我不确定如何将 PS 中的上述 comdlet 转换为 C#。

如何指定目标文件? (我指的是 PS 中的选项 -outfile)

除了 HttpClient 别用任何东西。如果您发现自己在输入 WebClient 而不是 HttpClient,请将您的手从键盘上拍开。

您要使用 HttpClient 下载文件吗?这是一个如何做到这一点的例子:

private static readonly HttpClient _httpClient = new HttpClient();

private static async Task DoSomethingAsync()
{
    using (var msg = new HttpRequestMessage(HttpMethod.Get, new Uri("https://www.example.com")))
    {
        msg.Headers.Add("x-my-header", "the value");
        using (var req = await _httpClient.SendAsync(msg))
        {
            req.EnsureSuccessStatusCode();
            using (var s = await req.Content.ReadAsStreamAsync())
            using (var f = File.OpenWrite(@"c:\users\andy\desktop\out.txt"))
            {
                await s.CopyToAsync(f);
            }
        }
    }
}

您可以使用 HttpClient任何事情。没有理由使用 RestClientWebClientHttpWebRequest 或任何其他“想要的”Http 客户端实现。