Release Notes
hosting-10.2.4 (2026-10-08)
Changes
Built-in heartbeat endpoint - A new
HeartbeatControllerservesGET api/heartbeat, returning the application name, environment and current UTC timestamp. The endpoint is[AllowAnonymous], so it can be used by load balancers and monitoring probes without credentials. It is discovered automatically by any web host built onAlbatross.Hosting.UseHeartbeattoggle onStartup- A newprotected bool UseHeartbeatproperty (defaulttrue). Set it tofalsein a derivedStartupto remove the heartbeat controller from the application.
hosting-10.2.3 (2026-10-02)
Changes
- Optional Serilog request logging - A new
protected bool LogRequestsproperty onStartup(defaultfalse). Whentrue,UseSerilogRequestLogging()is added to the pipeline, enriched with aUserproperty holding the authenticated user name (or<anon>). The middleware sits outside the exception handler, so each failed request is logged once with the status code of the handled response. Override the virtualUseRequestLogging()to customize the middleware options.
Dependencies
- Added
Serilog.AspNetCore10.0.0 - Bumped
Albatross.Configto8.0.2
hosting-10.2.2 (2026-09-13)
First stable release of the changes listed under hosting-10.2.1, which was published only as release candidates. No additional changes.
hosting-10.2.1 (2026-09-13)
Bug Fixes
TransformAngularConfig.UpdateBaseHref()no longer writes when the file is already correct - The index html is now compared against the transformed content and written only when the base href actually changes. Previously the writer was opened on every startup regardless of whether the regex matched anything, which threwUnauthorizedAccessExceptionand took the host down when the app was installed in a read-only directory (under%ProgramFiles%, or served by an IIS application pool or service account identity).Base href write failures are no longer fatal - A failure to write the index html is now logged as an error instead of propagating. In a deployed environment setting the base href is the installer's responsibility, so the app should still start.
Dependencies
- Bumped
Microsoft.AspNetCore.*andMicrosoft.Extensions.Hosting.*package references to10.0.12 - Bumped
Albatross.Configto8.0.1
Infrastructure
- SourceLink moved to
Albatross.Hosting.csproj-Microsoft.SourceLink.GitHub(updated to10.0.401) is now referenced by the package project directly rather than applied to every project throughDirectory.Build.props.
hosting-10.2.0 (2026-03-31)
Breaking Changes
Setupconstructor signature changed - The constructor parameterbool supressUnhandledArgumentExceptionLogginghas been replaced withstring configRoot. Callers must pass the configuration root directory explicitly (e.g.,new Setup(args, AppContext.BaseDirectory)).Removed
SupressUnhandledArgumentExceptionLoggingandConfigureLogging()- TheSupressUnhandledArgumentExceptionLoggingproperty and the virtualConfigureLogging()override point have been removed. Serilog filtering must now be configured directly via theserilog.jsonconfiguration file.hostsettings.jsonno longer loaded - Host URL configuration viahostsettings.jsonis no longer part of the default configuration pipeline.Removed
LogUsageandHttpRequestLoggingMiddleware- TheLogUsageproperty onStartup, theHttpRequestLoggingMiddleware,UsageWriter, andUsageDataclasses have all been removed. Request logging should now be implemented using Serilog's built-in middleware or custom enrichers.
Changes
IHttpContextAccessorregistered by default -services.AddHttpContextAccessor()is now called inStartup.ConfigureServices(), makingIHttpContextAccessoravailable for injection without additional setup.Serilog configured from
serilog.json- Serilog is now configured by readingserilog.json(andserilog.{environment}.json) directly viaConfigurationin theSetupconstructor, replacing the previousSetupSerilog.UseConfigFile()approach.config-rootconstructor parameter - The base directory from which configuration files are loaded is now passed directly as theconfigRootconstructor argument toSetup, defaulting toAppContext.BaseDirectory.RazorPagestoggle onStartup- A newprotected virtual bool RazorPagesproperty (defaultfalse) can be overridden to enable Razor Pages support. Whentrue,AddRazorPages()is registered andMapRazorPages()is wired into the endpoint pipeline.RunAsync()usesawait using- The bootstrap logger is now disposed asynchronously withawait usingfor correct async teardown.
hosting-10.1.0 (2026-01-27)
Breaking Changes
Simplified global exception handling - Removed the
IGlobalExceptionHandlerinterface,HttpApiException,ErrorMessage,ProblemDetailsWithTraceId,LegacyGobalExceptionHandler, andExceptionHandlerSerializationOptionsclasses. The global exception handler is now a sealedGlobalExceptionHandlerclass that serves as a fallback for unhandled exceptions. Errors should be handled explicitly usingActionResultin controller actions.Removed
GlobalExceptionHandlerproperty fromStartup- The virtualGlobalExceptionHandlerproperty has been removed. The handler is no longer customizable via override.
hosting-10.0.1 (2026-01-20)
Documentation
Added comprehensive documentation - Migrated and expanded documentation to DocFX format:
- Authentication guide covering Kerberos and JWT Bearer token configuration
- Custom error response handling guide
- Plain text input formatter usage
- Service/daemon application development guide
- SPA hosting configuration guide
- Web API application development guide
- Request logging documentation
Enhanced README - Expanded the
Albatross.HostingREADME with more detailed usage examples and configuration options
Infrastructure
- Added GitHub Actions workflow - Added GitHub Pages workflow for automated documentation publishing
hosting-10.0.0 (2025-12-10)
Breaking Changes
- Upgraded to .NET 10 - The target framework has been upgraded from .NET 9 to .NET 10. All consuming projects must target .NET 10 or later.
Changes
Fixed default authentication scheme - Changed authentication configuration to use
AuthenticationSettings.GetDefault()method instead of theDefaultAuthenticationSchemeproperty for more reliable scheme resolution.Updated OpenAPI integration - Updated to the latest OpenAPI types:
- Changed
Dictionary<string, OpenApiSecurityScheme>toDictionary<string, IOpenApiSecurityScheme> - Changed
doc.SecurityRequirementstodoc.Security - Updated to use
OpenApiSecuritySchemeReferencefor security requirement references
- Changed
Dependencies
Updated all dependencies to .NET 10 compatible versions:
Albatross.Logging10.0.1Albatross.Serialization.Json10.0.0Microsoft.AspNetCore.Authentication.JwtBearer10.0.1Microsoft.AspNetCore.Authentication.Negotiate10.0.1Microsoft.AspNetCore.SpaServices.Extensions10.0.1Microsoft.Extensions.Hosting.Systemd10.0.1Microsoft.Extensions.Hosting.WindowsServices10.0.1Microsoft.AspNetCore.OpenApi10.0.1Swashbuckle.AspNetCore10.0.1