WebClient (.net 4.6) to HttpClient (.net core)



谁能帮我把这个代码片段转换为.net核心的等效物?

        Uri uri = new Uri(url);
        string filename = System.IO.Path.GetFileName(uri.LocalPath);
        string extension = Path.GetExtension(filename);
        string tempFilepath = Path.GetTempFileName() + extension;
        try
        {
            WebClient webClient = new WebClient();
            webClient.DownloadFile(url, tempFilepath);
            if (new FileInfo(tempFilepath).Length > 0)
            {
                return tempFilepath;
            }
            else {
                return null;
            }
        }
        catch (WebException e)
        {
            return null;
        }
        catch (NotSupportedException e)
        {
            return null;
        }

实际上,此代码以前在 .net 4.6 中写入的应用程序中。然后前段时间,我们停止使用该应用程序。现在我正在.net core中开发另一个应用程序,并将做完全相同的事情。所以我想知道我将如何使用 .net 核心来做到这一点?HttpClient 中 DownloadFile 方法的替代方法是什么?

应该可以做到...

try
{
    using (var client = new HttpClient())
    {
        using (HttpResponseMessage response = client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead).Result)
        {
            response.EnsureSuccessStatusCode();
            using (Stream contentStream = response.Content.ReadAsStreamAsync().Result, fileStream = new FileStream(tempFilepath, FileMode.Create, FileAccess.Write, FileShare.None, 8192, true))
            {
                var buffer = new byte[8192];
                var isMoreToRead = true;
                do
                {
                    var read = contentStream.ReadAsync(buffer, 0, buffer.Length).Result;
                    if (read == 0)
                    {
                        isMoreToRead = false;
                    }
                    else
                    {
                        fileStream.WriteAsync(buffer, 0, read);
                    }
                }
                while (isMoreToRead);
            }
        }
    }

或者你可以像这样更干净地实现这一点:如何实现可移植 HttpClient 的进度报告

更简单的方法是...

        HttpClient client = new HttpClient();
        try
        {
            var response =  client.GetStringAsync(url);
            Console.WriteLine(response.Result);
        }
        catch (Exception e)
        {
            Console.WriteLine("Message :{0} ", e.Message);
        }
        finally{
            client.Dispose();
        }

目标框架:网络核心应用1.1
编辑 器:视觉工作室代码
应用类型 :控制台应用程序

最新更新