HTTP User Agent Parser Extensions for ASP.NET Core
$ dotnet add package MyCSharp.HttpUserAgentParser.AspNetCoreASP.NET Core integration for MyCSharp.HttpUserAgentParser.
Repository: https://github.com/mycsharp/HttpUserAgentParser
dotnet add package MyCSharp.HttpUserAgentParser.AspNetCore
Register a provider (any of the available ones) and then add the accessor:
The accessor pattern reads the User-Agent header from the current HttpContext and parses it using the registered provider.
services
.AddHttpUserAgentMemoryCachedParser() // or: AddHttpUserAgentParser / AddHttpUserAgentCachedParser
.AddHttpUserAgentParserAccessor();
Usage:
public sealed class MyController(IHttpUserAgentParserAccessor accessor)
{
public HttpUserAgentInformation Get() => accessor.Get();
}
If you only want the raw User-Agent string:
string? ua = HttpContext.GetUserAgentString();
Telemetry is modular and opt-in.
services
.AddHttpUserAgentParserAccessor()
.WithAspNetCoreTelemetry();
The accessor registration returns the same options object, so you can chain this after any parser registration.
EventSource: MyCSharp.HttpUserAgentParser.AspNetCore (constant: HttpUserAgentParserAspNetCoreEventSource.EventSourceName)
user_agent.present (incrementing)user_agent.missing (incrementing)dotnet-counters monitor --process-id <pid> MyCSharp.HttpUserAgentParser.AspNetCore
This package can also emit native System.Diagnostics.Metrics instruments.
services
.AddHttpUserAgentParserAccessor()
.WithAspNetCoreMeterTelemetry();
Meter: MyCSharp.HttpUserAgentParser.AspNetCore (constant: HttpUserAgentParserAspNetCoreMeters.MeterName)
user_agent.present (counter)user_agent.missing (counter)Collect via OpenTelemetry EventCounters instrumentation:
using OpenTelemetry.Metrics;
metrics.AddEventCountersInstrumentation(options =>
{
options.AddEventSources(HttpUserAgentParserAspNetCoreEventSource.EventSourceName);
});
Then export using your preferred exporter (OTLP, Prometheus, Azure Monitor / Application Insights, …).
If you enabled native meters (see above), collect them via AddMeter(...):
using OpenTelemetry.Metrics;
using MyCSharp.HttpUserAgentParser.AspNetCore.Telemetry;
metrics.AddMeter(HttpUserAgentParserAspNetCoreMeters.MeterName);