Skip to content

RoccoZero/System.Net.Http.Handlers

Repository files navigation

System.Net.Http.Handlers NuGet Version

Simple progress tracking for HttpClient via DelegatingHandler.

This package is based on the original ProgressMessageHandler from ASP.NET Web Stack (System.Net.Http.Handlers) and adapts the same idea for modern .NET. The original source lives in the aspnet/AspNetWebStack repository.

Install

dotnet add package RoccoZero.System.Net.Http.Handlers
var progressMessageHandler = new ProgressMessageHandler(new HttpClientHandler());

progressMessageHandler.HttpSendProgress += (_, e) =>
{
    if (e.TotalBytes.HasValue && e.TotalBytes.Value > 0)
    {
        var percent = (double)e.BytesTransferred / e.TotalBytes.Value * 100;
        Console.WriteLine($"Upload: {percent:F2}%");
    }
    else
    {
        Console.WriteLine($"Upload: {e.BytesTransferred} bytes");
    }
};

progressMessageHandler.HttpReceiveProgress += (_, e) =>
{
    if (e.TotalBytes.HasValue && e.TotalBytes.Value > 0)
    {
        var percent = (double)e.BytesTransferred / e.TotalBytes.Value * 100;
        Console.WriteLine($"Download: {percent:F2}%");
    }
    else
    {
        Console.WriteLine($"Download: {e.BytesTransferred} bytes");
    }
};

using var httpClient = new HttpClient(progressMessageHandler);
using var response = await httpClient.GetAsync(
    "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.202/dotnet-sdk-10.0.202-win-x64.exe");

response.EnsureSuccessStatusCode();

Why

  • No manual stream wrapping
  • Upload + download progress
  • Works directly with HttpClient
  • Clean and reusable

About

System.Net.Http.Handlers

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages