HomeSearch

C# HttpClient Example: System.Net.Http

This C# example uses the HttpClient type to download a web page. It requires System.Net.Http and System.Threading.Tasks.

HttpClient.

Files from the Internet must often be accessed. This requires more time due to reduced locality. During this time, a program can perform other tasks.

Class, notes.

The .NET Framework provides a HttpClient class that makes downloading files on separate threads easier. It helps simplify syntax.

To start,

we use the async and await keywords. In Main, we start a task and use DownloadPageAsync, an async method, as the target. This method is started—it downloads a web page.

Tip: In DownloadPageAsync, we use 3 using-statements. This helps improve system resource usage.

Await: We use the await keyword twice. We first call GetAsync and then ReadAsStringAsync. And finally we display the result string.

UsingStrings
C# program that uses HttpClient using System; using System.Net.Http; using System.Threading.Tasks; class Program { static void Main() { Task t = new Task(DownloadPageAsync); t.Start(); Console.WriteLine("Downloading page..."); Console.ReadLine(); } static async void DownloadPageAsync() { // ... Target page. string page = "http://en.wikipedia.org/"; // ... Use HttpClient. using (HttpClient client = new HttpClient()) using (HttpResponseMessage response = await client.GetAsync(page)) using (HttpContent content = response.Content) { // ... Read the string. string result = await content.ReadAsStringAsync(); // ... Display the result. if (result != null && result.Length >= 50) { Console.WriteLine(result.Substring(0, 50) + "..."); } } } } Output Downloading page... <!DOCTYPE html> <html lang="en" dir="ltr" class="c...

Static HttpClient.

A network connection uses limited system resources. These can become exhausted with the normal "using" pattern on HttpClient.

And: A static HttpClient may work better in some programs. If you run out of system resources with HttpClient, try a static HttpClient.

Note: The "using" statement should usually be used with types that implement IDisposable. But if this causes an error, it can be omitted.

C# program that uses static HttpClient using System; using System.Net.Http; using System.Threading.Tasks; class Program { static void Main() { // Run the task. Task.Run(new Action(DownloadPageAsync)); Console.ReadLine(); } static HttpClient _client = new HttpClient(); static async void DownloadPageAsync() { // Use static HttpClient to avoid exhausting system resources for network connections. var result = await _client.GetAsync("http://www.example.com/"); // Write status code. Console.WriteLine("STATUS CODE: " + result.StatusCode); } } Output STATUS CODE: OK

A discussion.

The functionality of HttpClient overlaps with WebClient. The syntax of these two types is different. WebClient does not currently support the async and await syntax.

Note: With WebClient, its "Async" method uses an object token. This is more clumsy.

WebClient

Therefore: If async and await are used in the program, the HttpClient is preferable—it gains compiler checking and improved syntax.

A review.

HttpClient provides powerful functionality with better syntax support for newer threading features. It supports the await keyword.

Note: Thanks to Nedim Ibrahimkadic for the helpful information about reusing a single HttpClient.

HttpClient enables

threaded downloads of Internet files with better compiler checking and code validation. It requires newer versions of the .NET Framework.async, await
Home
Dot Net Perls
© 2007-2019 Sam Allen. All rights reserved. Written by Sam Allen, info@dotnetperls.com.