MAUI Networking

Empowering your .NET MAUI applications with robust network connectivity.

Working with Network Requests in .NET MAUI

.NET MAUI (Multi-platform App UI) provides a rich set of tools and libraries to handle networking operations seamlessly across Android, iOS, macOS, and Windows. Efficiently fetching data from web services, sending data to APIs, and managing real-time communication are crucial for modern applications.

Core Networking Concepts

The primary way to interact with network resources in .NET MAUI is through the use of the HttpClient class from the System.Net.Http namespace. This class is designed for sending HTTP requests and receiving HTTP responses from a resource identified by a URI.

Making HTTP Requests with HttpClient

HttpClient is a modern, powerful, and flexible class for making HTTP requests. It's recommended to instantiate a single HttpClient object and reuse it for the lifetime of the application. This is due to the overhead associated with creating new instances, especially concerning socket exhaustion.

GET Request Example

To retrieve data from a web API, you'll typically use a GET request:


using System;
using System.Net.Http;
using System.Threading.Tasks;

public async Task FetchDataAsync(string url)
{
    using var client = new HttpClient();
    try
    {
        HttpResponseMessage response = await client.GetAsync(url);
        response.EnsureSuccessStatusCode(); // Throws if the status code is an error

        string responseBody = await response.Content.ReadAsStringAsync();
        Console.WriteLine(responseBody);
        // Process the responseBody here (e.g., deserialize JSON)
    }
    catch (HttpRequestException e)
    {
        Console.WriteLine($"Request error: {e.Message}");
    }
}
            

POST Request Example

To send data to a web API, you can use a POST request:


using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

public async Task PostDataAsync(string url, string jsonData)
{
    using var client = new HttpClient();
    var content = new StringContent(jsonData, Encoding.UTF8, "application/json");

    try
    {
        HttpResponseMessage response = await client.PostAsync(url, content);
        response.EnsureSuccessStatusCode(); // Throws if the status code is an error

        string responseBody = await response.Content.ReadAsStringAsync();
        Console.WriteLine($"Response: {responseBody}");
        // Process the response here
    }
    catch (HttpRequestException e)
    {
        Console.WriteLine($"Request error: {e.Message}");
    }
}
            

Handling Network Connectivity

It's essential to check for network connectivity before attempting any network operations to provide a better user experience and prevent unexpected errors. .NET MAUI provides the Connectivity API for this purpose.

Checking Network Status


using Microsoft.Maui.Connectivity;
using System;

public void CheckConnectivity()
{
    var connectivity = new Connectivity();

    if (connectivity.NetworkAccess == NetworkAccess.Internet)
    {
        Console.WriteLine("Internet access is available.");
        // Proceed with network operations
    }
    else if (connectivity.NetworkAccess == NetworkAccess.Local)
    {
        Console.WriteLine("Local network access is available.");
    }
    else
    {
        Console.WriteLine("No network access is available.");
        // Inform the user or take alternative actions
    }
}
            
Tip: Register event handlers for Connectivity.ConnectivityChanged to be notified of network status changes. This allows your application to dynamically adjust its behavior.

Asynchronous Programming

All network operations in .NET MAUI should be performed asynchronously using async and await to avoid blocking the UI thread and maintain responsiveness.

Further Reading

Advanced Networking Scenarios

For more complex scenarios like real-time communication, consider using Web Sockets. .NET MAUI supports Web Sockets through the System.Net.WebSockets namespace.