Introduction
In the .NET framework, there are three ways we can consume Rest APIs.
- System.Net.WebRequest
- WebClient
- HttpClient
System.Net.WebRequest
System.Net.WebRequest is an abstract class. The HttpWebRequest class allows you to programmatically make web requests to the HTTP server.
The following code snippet shows how we can work with HttpWebRequest.
Create a Console Application
File-->New-->Project
Select Console Application and give it some meaningful name, like HttpWebRequest

After creating a console application, write the code with HttpWebRequest

This code shows how to read file contents from a remote webserver using the HttpWebRequest Class.

WebClient
The System.Net.WebClient class provides a high-level abstraction on top of HttpWebRequest. WebClient is just a wrapper around HttpWebRequest, so it uses HttpWebRequest internally.
The WebClient bit slow compared to HttpWebRequest.But is very much less code. we can use WebClient for simple ways to connect and work with HTTP services.
Create another Console Application in the existing Solution
Right click on solution -->Add-->New Project

Select the Console Application and give it the name HttpWebClient

Add code for downloading string data from Rest API using WebClient. We can pass optional headers.
The following simple code shows we can download string data from Rest APIs
HttpClient
HttpClient available .Net framework 4.5 or later versions. The HttpsClient provides functionality that neither the Webclient or HttpWenRequest does.
For example, with HttpsClient we can make multiple requests without having to create a new object.
Http class makes downloading files on separate threads easier. It is the preferred way to consume HTTP requests unless you have a specific reason not to use it. HttpClient combines the flexibility of HttpWebRequest and WebClient.
Create another Console Application in the existing Solution
Right click on solution --> Add --> New Project

Select the console application with the name SystemHttpClient

To start, we use the async and await keywords.

HttpClient doesn't support FTP, mocking and testing HttpClient is easier. All the I/O bound methods in HttpClient are asynchronous, and we can use the same HttpClient instance to make concurrent requests as well.
The following code snippet shows how we can work with HttpClient.
Note that when there is an error in the response, HttpClient doesn't throw any error. Rather, it sets the IsSucessStatusCode property to false.
Summary
Above we described the differences between HttpWebRequest, WebClient, and HttpClient.

Sandip G PatilPosted Dec 24, 2024, 1:30 PM
Nice article
Jon KellingPosted May 13, 2020, 2:15 PM
There is inconsistency in your disposal of HttpClient instances. Also, when to dispose HttpClient instances is not totally trivial, and HttpWebRequest's ConnectionGroupName offers an easier way of introducing multiple connection pools.