BirdMessenger 2.2.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package BirdMessenger --version 2.2.1
NuGet\Install-Package BirdMessenger -Version 2.2.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="BirdMessenger" Version="2.2.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add BirdMessenger --version 2.2.1
#r "nuget: BirdMessenger, 2.2.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install BirdMessenger as a Cake Addin
#addin nuget:?package=BirdMessenger&version=2.2.1

// Install BirdMessenger as a Cake Tool
#tool nuget:?package=BirdMessenger&version=2.2.1


Getting started

// file to be uploaded
FileInfo fileInfo = new FileInfo("test.txt");

// remote tus service
var hostUri = new Uri(@"http://localhost:5000/files");

// build a standalone tus client instance
var tusClient = TusBuild.DefaultTusClientBuild(hostUri).Build();

//hook up events
tusClient.UploadProgress += printUploadProcess;
tusClient.UploadFinish += uploadFinish;

//define additional file metadata 
MetadataCollection metadata = new MetadataCollection();
metadata["filename"] = fileInfo.FullName;

//create upload url
var fileUrl = await tusClient.Create(fileInfo, metadata);

 var uploadOpt = new TusRequestOption()
     UploadWithStreaming = true //enable streaming Upload
 //upload file
var uploadResult = await tusClient.Upload(fileUrl, fileInfo, null,uploadOpt);

Subscribe upload events

Delegate prototype

/// <summary>
/// tus client delegate
/// </summary>
delegate void TusUploadDelegate(ITusClient source, ITusUploadContext tusUploadContext);

ITusClient events

/// <summary>
/// upload completition event
/// </summary>
event TusUploadDelegate UploadFinish;

/// <summary>
/// upload progress event
/// </summary>
event TusUploadDelegate UploadProgress;
  • UploadFinish: It is invoked when the file has been uploaded
  • UploadProgress: This method is used to notify the progress of the upload

ITusUploadContext specification

The field definition for ITusUploadContext is as follows:

  • public long TotalSize { get; } : Total size of upload File
  • public long UploadedSize { get; set; } : Total uploaded size
  • public FileInfo UploadFileInfo { get; } : Upload file info
  • public Uri UploadFileUrl { get;} : URl of upload file

TusRequestOption specification

Note:Need client version to 2.2.0

  • HttpHeader : Send Http request with a custom request header
  • UploadWithStreaming : Gets or sets a value that indicates whether upload file with streaming,upload file with streaming is efficient, default value is false

Building an ITusClient instance

Build standalone ITusClient by TusBuild.DefaultTusClientBuild

// returns an isolated instance of ITusClient
var tusClient = TusBuild.DefaultTusClientBuild(tusHost).Build(); 

Build ITusClient using Dependency Injection

Non-specific ITusClient configuration
public static void ConfigureServices(IServiceCollection services)
public class Example
    public Example(ITusClient tusClient) 
Specific ITusClient configuration based on targeted service
public static void ConfigureServices(IServiceCollection services)
public class Example
    public Example(ITusClient<Example> tusClient) 
  • tusHost is tus server Url
  • by default, every HTTP request is sent with a "Tus-Resumable: 1.0.0" header (except for Options requests)

ITusClient configuration

  • All three configuration methods can be called with either an URI or a configuration action

Basic configuration

Action<TusClientOptions> configure = (options) => {
    options.TusHost = tusHost;
    options.GetChunkUploadSize = (src, ctx) => 1 * 1024 * 1024; // 1 mega byte per upload request
    options.FileNameMetadataName = "fileName"; // default creation metadata
TusDefaultBuilder tusClientBuilder = TusBuild.DefaultTusClientBuild(configure);


TusHttpClientBuilder tusClientBuilder = services.AddTusClient(configure);


TusHttpClientBuilder tusClientBuilder = services.AddTusClient<Example>(configure);

HttpClient configuration

var tusClientBuilder = TusBuild.DefaultTusClientBuild(configure);
// OR
// var tusClientBuilder = TusBuild.DefaultTusClientBuild(tusHost);

tusClientBuilder.Configure((TusClientOptions options, IHttpClientBuilder httpClientBuilder) => {
    //configure either options or httpClientBuilder
    httpClientBuilder.ConfigureHttpClient(httpClient =>
                        httpClient.DefaultRequestHeaders.Authorization =
                            new AuthenticationHeaderValue("Bearer", "ACCESS_TOKEN");
  • TusHttpClientBuilder has 3 main methods:
public TusHttpClientBuilder Configure(Action<TusClientOptions, IHttpClientBuilder> builder);
public TusHttpClientBuilder ConfigureCore(Action<TusClientOptions, IHttpClientBuilder> builder);
public TusHttpClientBuilder ConfigureExtension(Action<TusClientOptions, IHttpClientBuilder> builder);
  • TusDefaultBuilder inherits TusHttpClientBuilder
  • Configure will call both ConfigureCore and ConfigureExtension to configure the HttpClient used by either the Core of tus or the Extension of tus
  • tus uses two different HttpClient for core and extensions, you may configure each as you need

Polly Integration

HttpClientFactory With Polly

Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on BirdMessenger:

Package Downloads

Hopex Application Server Packager


These are base utility classes developed by The Fusion Works which other packages and applications are built off.


A client library for Codehard's File Service.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
3.1.3 109 5/21/2024
3.1.2 14,005 10/7/2023
3.1.1 1,954 8/14/2023
3.1.0 14,320 11/27/2022
3.0.2 809 11/8/2022
3.0.1 382 11/8/2022
3.0.0 846 10/17/2022
3.0.0-beta1 177 8/14/2022
2.2.1 52,195 6/11/2022
2.2.0 4,014 3/6/2022
2.1.0-bata 243 10/17/2021
2.0.1 285,253 3/2/2021
2.0.0 319,975 10/23/2020
1.0.1 490 7/26/2020
1.0.0 637 8/25/2019
1.0.0-beta1 437 8/2/2019
0.1.6 503 11/18/2019
0.1.5 649 11/17/2019
0.1.4 748 11/27/2018
0.1.3 732 11/3/2018
0.1.2 728 10/24/2018
0.1.1 732 10/19/2018
0.1.0 783 10/14/2018