谁能帮我把这个代码片段转换为.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
编辑 器:视觉工作室代码
应用类型 :控制台应用程序