Skip to content
Client v5: BLE, BLE Hosting, HTTP, Jobs - Linux, MacOS, & Blazor Support! Full AOT, RX on BLE only & MANY other features! Check It Out

HTTP Transfers Releases

Fix iOS
Background NSUrlSession is no longer nulled out when the in-flight transfer count reaches zero. Dropping the reference without invalidating could lead to a duplicate-identifier crash (A background URLSession with identifier X already exists!) the next time a transfer was queued, or silently swap the delegate instance the system held.
Fix iOS
IHandleEventsForBackgroundUrl.Handle now compares the incoming sessionIdentifier against the manager’s session identifier (returning false on mismatch) and forces the NSUrlSession to materialize before storing the completion handler, so the delegate is wired up before the OS redelivers background events after a launch.
Rx removed. IHttpTransferManager no longer exposes WhenUpdateReceived(), WatchCount(), or any other IObservable<T> members. Subscribe to the new C# events UpdateReceived and CountChanged instead. WatchTransfer(identifier) now returns Task<HttpTransferResult> directly (await it, no Subscribe). The HttpClient.Upload/Download foreground helpers return Task and accept an Action<TransferProgress>? onProgress callback.
Enhancement
Non-iOS HTTP transfer processes consolidated into a single managed HttpClientHttpTransferProcess. Android, Windows, Linux, macOS, and plain .NET now share one driver; the platform-specific Android HttpTransferProcess and Windows HttpTransferProcess have been removed.
Feature
Plain .NET (base TFM) support — Shiny.Net.Http now ships a managed HttpClientHttpTransferManager for Linux, macOS, and any non-iOS/Android/Windows .NET host. Backed by HttpClient + IConnectivity, the loop wakes immediately on connectivity changes and supports resumable downloads via HTTP Range requests (206 Partial ContentFileMode.Append). Uploads always restart on failure. A default JSON filesystem repository is registered automatically so queued transfers survive process restarts. Cancelled downloads clean up partial files on disk. Register with services.AddHttpClientTransfers<TDelegate>(), and supply an IConnectivity implementation (e.g. AddConnectivity() from Shiny.Core.Linux or Shiny.Core.Blazor).
Enhancement Android
Background transfers now run on the same unified managed HttpClient + IConnectivity loop as the other non-iOS platforms (hosted inside the existing foreground service), bringing resumable downloads via HTTP Range requests to Android.
Feature
New Shiny.Net.Http.Blazor package — background HTTP transfers for Blazor WebAssembly using the Service Worker Background Sync API. Queued transfers are persisted to IndexedDB and drained by a Service Worker via fetch() even while the browser tab is closed (where supported). Download bodies are stored back in IndexedDB; the C# manager reconciles results and fires IHttpTransferDelegate callbacks when the tab reopens. Registered via services.AddBlazorHttpTransfers<TDelegate>(). Ship the bundled ./_content/Shiny.Net.Http.Blazor/http-transfer-sw.js SW or importScripts it from your own service worker. v1 limitations: downloads are not resumable (SW fetches return a whole Blob); upload bodies are base64-bridged through JS interop; Background Sync is Chromium-only (Firefox/Safari fall back to foreground drain).
Enhancement
RemoteFileName property on AzureBlobStorageUploadRequest allows overriding the uploaded file name
Enhancement
Azure Blob Storage URI now includes the file path
Enhancement
AWS S3 support added
Feature
Windows support added (No Background Support at this time)
Fix
HttpTransferMonitor now uses thread safe BindingList
Fix Android
File uploads now check to make sure file exists before queuing and downloads directories are checked to ensure they exist before queuing
Fix iOS
Send filenames with special characters properly and improved form data upload
Enhancement
Transfers can now be UploadMultipart, UploadRaw (body is raw bytes), or Download - this necessary for sending directly to Azure Blob Storage
Enhancement
AzureBlobStorageRequest.CreateForAzureBlobStorage static helper method
Enhancement
New HttpTransferDelegate allows you to set retries and detect denied authorization allowing you to refresh your token and issue a new request
Enhancement iOS
Allow fine tuned control of the nsurlsessionconfiguration and the mutable native request on iOS via implementing (& registering) INativeConfigurator
Fix Android
Ensure HTTP transfer foreground service does start multiple times
Fix Android
Check for the presence of FOREGROUND_SERVICE_DATA_SYNC on API 34
Fix Android
More aggressive retrying of transfers in queue
Fix Android
Appropriate amount of wizardary applied to remove foreground service notifications
Fix
Race condition when subscribed to ShinySubject based subjects
Enhancement
Rewritten API makes it easier than ever to monitor metrics of your transfers
Enhancement Android
Now supports persistent progress notifications
Enhancement
You can pass AppleHttpTransferRequest & AndroidHttpTransferRequest to the HttpTransferManager to customize the native request