ASP.NET Core 使用 WebClient 从 URL 下载

本文使用 ASP .NET Core 3.1,但它在.NET 5、 .NET 6和.NET 8上也同样适用。如果使用较旧的.NET Framework,请参阅本文,不过,变化不大。

如果想要从 URL 下载任何数据类型,请参阅本文:HttpClient

使用WebClient.DownloadFile()是一种非常有效的方法来下载文件并将其保存在某处以进行处理。请注意,cookie 正在发送到服务器。

using (System.Net.WebClient wc = new System.Net.WebClient())

{

wc.Headers.Add("Cookie: Authentication=user"); // NOTE: add a cookie header to the request

try

{

string filename = System.Guid.NewGuid().ToString("N") + ".html"; // NOTE: use globally unique identifier for file name to avoid naming conflicts

wc.DownloadFile("http://www.prowaretech.com/", filename); // NOTE: could add a file extension here

// NOTE: do something with file

}

catch (System.Exception ex)

{

// NOTE: check exception object for the error

}

}

WebClient.DownloadString()对服务器内存的使用效率较低,但对于下载JSON来说效果很好。

using (System.Net.WebClient wc = new System.Net.WebClient())

{

try

{

wc.Headers["Accept"] = "application/json"; // NOTE: accept JSON code (optional)

string strJson = wc.DownloadString("http://www.prowaretech.com/json/some-file.json");

// NOTE: do something with "strJson"

}

catch (System.Exception ex)

{

// NOTE: check exception object for the error

}

}

WebClient.UploadString()用于提交 POST 请求并下载结果(在本例中为 JSON)。

using (System.Net.WebClient wc = new System.Net.WebClient())

{

try

{

wc.Headers["Accept"] = "application/json"; // NOTE: accept JSON code (optional)

wc.Headers["User-Agent"] = "Custom User-Agent"; // NOTE: set the user-agent header (optional)

string postBody = "field1=data1&field2=data2&field3=data3"; // NOTE: special characters in the data must be escaped

string strResult = wc.UploadString("http://www.prowaretech.com/some/endpoint", postBody);

// NOTE: do something with "strResult"

}

catch (System.Exception ex)

{

// NOTE: check exception object for the error

}

}

WebClient.DownloadData()是另一种效率较低的服务器内存使用方式。它将文件/端点/url 下载到字节数组中。

using (System.Net.WebClient wc = new System.Net.WebClient())

{

try

{

byte[] data = wc.DownloadData("http://www.prowaretech.com/file.html");

if (wc.ResponseHeaders != null)

{

string? contentType = wc.ResponseHeaders["Content-Type"];

// NOTE: do something with data and contentType (Content-Type should BEGIN with "text/html" in this case)

}

else

{

// NOTE: do something with data

}

}

catch (System.Exception ex)

{

// NOTE: check exception object for the error

}

}

WebClient.OpenRead()如果将整个流读入内存,则服务器内存的使用效率会降低。StreamReader.Read()在服务器上处理大型文件时,应谨慎使用内存。

using (System.Net.WebClient wc = new System.Net.WebClient())

{

try

{

using (System.IO.Stream stream = wc.OpenRead("http://www.prowaretech.com/"))

{

using (System.IO.StreamReader reader = new System.IO.StreamReader(stream))

{

string str = reader.ReadToEnd(); // NOTE: could read one character at a time with reader.Read() which is more efficient with regard to memory usage

// NOTE: do something with str

}

}

}

catch (System.Exception ex)

{

// NOTE: check exception object for the error

}

}

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
MoFe13 天前
【.net core】【NPOI】读取表格信息(处理合并行表格数据)
.netcore
csdn_aspnet3 天前
在 .NET Core 中实现基于策略和基于角色的授权
.netcore·role·policy
The Sheep 20233 天前
.NetCore MVC
mvc·.netcore
一包烟电脑面前做一天3 天前
.NetCore下Ocelot + Nacos 实现负载均衡
nacos·负载均衡·.netcore·ocelot·ocelot集成nacos
一个帅气昵称啊4 天前
NetCoreKevin-DDD-微服务-WebApi-AI智能体、AISK集成、MCP协议服务、SignalR、Quartz 框架-16-部署与基础设施
微服务·云原生·架构·系统架构·.netcore
忧郁的蛋~4 天前
在.NET标准库中进行数据验证的方法
后端·c#·asp.net·.net·.netcore
willhuo4 天前
学生请假就餐系统
运维·服务器·.netcore
一包烟电脑面前做一天6 天前
.NetCore 接入 Nacos,实现配置中心和服务注册
nacos·.netcore·服务注册发现·配置中心
切糕师学AI8 天前
.Net Core Web 架构(管道机制)的底层实现
中间件·系统架构·kestrel·mvc·.netcore·路由·请求管道
时光追逐者11 天前
C#/.NET/.NET Core技术前沿周刊 | 第 51 期(2025年8.18-8.24)
c#·.net·.netcore·.net core