C#网络编程System.Net.WebClient 类vs System.Net.Http.HttpClient 类

目录

一、WebClient 类

1.WebClient 将数据上传到资源的方法

2.WebClient 从资源下载数据的方法

3.示例源码

4.生成效果

二、HttpClient 类

1.示例源码

2.生成效果


        为什么要把两者拿出来pk呢?那是因为WebClient已经在.NET 6.0以后得版本被弃用了,一旦在.NET 6.0以上的框架下使用时,会产生SYSLIB0014 警告。虽然可以根据提示采取措施禁止警告,但已经是不正常的状态了。

        SYSLIB0014 警告 - .NET | Microsoft Learn  https://learn.microsoft.com/zh-cn/dotnet/fundamentals/syslib-diagnostics/syslib0014

        从 .NET 6 开始,将以下 API 标记为已过时。 在代码中使用这些 API 会在编译时生成警告 SYSLIB0014。并提示解决方法:请改用 HttpClient。

        WebRequest()
        System.Net.WebRequest.Create
        System.Net.WebRequest.CreateHttp
        System.Net.WebRequest.CreateDefault(Uri)
        HttpWebRequest(SerializationInfo, StreamingContext)
        System.Net.ServicePointManager.FindServicePoint
        WebClient()

一、WebClient 类

         命名空间:System.Net。提供用于将数据发送到由 URI 标识的资源及从这样的资源接收数据的常用方法。

        类 WebClient 提供用于将数据发送到或从 URI 标识的任何本地、Intranet 或 Internet 资源接收数据的常用方法。

        类 WebClient 使用 WebRequest 类提供对资源的访问权限。 WebClient实例可以访问使用 方法注册WebRequest.RegisterPrefix的任何WebRequest后代的数据。

1.WebClient 将数据上传到资源的方法

方法 说明
OpenWrite Stream检索用于将数据发送到资源的 。
OpenWriteAsync Stream检索用于将数据发送到资源的 ,而不会阻止调用线程。
UploadData 将字节数组发送到资源,并返回包含任何响应的 Byte 数组。
UploadDataAsync 在不 Byte 阻止调用线程的情况下,将数组发送到资源。
UploadFile 将本地文件发送到资源并返回包含任何响应的 Byte 数组。
UploadFileAsync 在不阻止调用线程的情况下,将本地文件发送到资源。
UploadValues 将 发送到 NameValueCollection 资源并返回包含任何响应的 Byte 数组。
UploadValuesAsync 将 发送到 NameValueCollection 资源并返回包含 Byte 任何响应的数组,而不会阻止调用线程。
UploadString 将 发送到 String 资源,并返回包含 String 任何响应的 。
UploadStringAsync 将 发送到 String 资源,而不会阻止调用线程。

2.WebClient 从资源下载数据的方法

方法 说明
OpenRead 以 的形式 Stream返回资源中的数据。
OpenReadAsync 从资源返回数据,而不会阻止调用线程。
DownloadData 从资源下载数据并返回 Byte 数组。
DownloadDataAsync 从资源下载数据并返回 Byte 数组,而不会阻止调用线程。
DownloadFile 将数据从资源下载到本地文件。
DownloadFileAsync 将数据从资源下载到本地文件,而不会阻止调用线程。
DownloadString String从资源下载 并返回 String。
DownloadStringAsync 从资源下载 , String 而不会阻止调用线程。

3.示例源码

// WebClient
// .NET 4.8控制台应用
// The following code example creates a WebClient instance 
// and then uses it to download data from a server and display it on the system console, 
// to download data from a server and write it to a file, 
// and to upload form values to a server and receive the response. 
using System;
using System.Collections.Specialized;
using System.Net;
using System.Text;

namespace ConsoleApp2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // Download the data to a buffer.
                WebClient client = new WebClient();

                byte[] pageData = client.DownloadData("http://www.contoso.com");
                string pageHtml = Encoding.ASCII.GetString(pageData);
                Console.WriteLine(pageHtml);

                // Download the data to a file.
                client.DownloadFile("http://www.contoso.com", "page.htm");

                // Upload some form post values.
                NameValueCollection form = new NameValueCollection
                {
                    { "MyName", "MyValue" }
                };
                byte[] responseData = client.UploadValues("http://www.contoso.com/form.aspx", form);
            }
            catch (WebException webEx)
            {
                Console.WriteLine(webEx.ToString());
                if (webEx.Status == WebExceptionStatus.ConnectFailure)
                {
                    Console.WriteLine("Are you behind a firewall?  If so, go through the proxy server.");
                }
            }
        }
    }
}

4.生成效果


    
        Microsoft Corporation
        
        
        
        
        
        
    
    
        

Your current User-Agent string appears to be from an automated process, if this is incorrect, please click this link:United States English Microsoft Homepage

二、HttpClient 类

        命名空间:System.Net.Http。一个用于从 URI 标识的资源发送 HTTP 请求和接收 HTTP 响应的类。

1.示例源码

// HttpClient
// HttpClient is intended to be instantiated once per application, rather than per-use. See Remarks.
// Call asynchronous network methods in a try/catch block to handle exceptions.
namespace test1 
{  
    class Program
    {
        static readonly HttpClient client = new();
        static async Task Main()
        {           
            try
            {
                using HttpResponseMessage response = await client.GetAsync("http://www.contoso.com/");
                response.EnsureSuccessStatusCode();
                string responseBody = await response.Content.ReadAsStringAsync();
                // Above three lines can be replaced with new helper method below
                // string responseBody = await client.GetStringAsync(uri);

                Console.WriteLine(responseBody);
            }
            catch (HttpRequestException e)
            {
                Console.WriteLine("\nException Caught!");
                Console.WriteLine("Message :{0} ", e.Message);
            }
        }
    }  
}

2.生成效果

// 运行结果 

    
        Microsoft Corporation
        
        
        
        
        
        
        
    
    
        

Your current User-Agent string appears to be from an automated process, if this is incorrect, please click this link:United States English Microsoft Homepage

你可能感兴趣的:(c#,.net,开发语言)