MyCSharp.HttpUserAgentParser 3.1.6

MyCSharp.HttpUserAgentParser

Fast HTTP User-Agent parsing for .NET.

Repository: https://github.com/mycsharp/HttpUserAgentParser

Install

dotnet add package MyCSharp.HttpUserAgentParser

Quick start (no DI)

string userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36";
HttpUserAgentInformation info = HttpUserAgentParser.Parse(userAgent);
// or: HttpUserAgentInformation.Parse(userAgent)

Dependency injection

If you want to inject a parser (e.g., in ASP.NET Core), use IHttpUserAgentParserProvider.

No cache

services
	.AddHttpUserAgentParser();

ConcurrentDictionary cache

services
	.AddHttpUserAgentCachedParser();
// or: .AddHttpUserAgentParser<HttpUserAgentParserCachedProvider>();

Telemetry (EventCounters)

Telemetry is:

  • Opt-in: disabled by default (keeps hot path overhead-free)
  • Low overhead: counters are only written when a listener is attached

Enable telemetry (Fluent API)

services
	.AddHttpUserAgentParser()
	.WithTelemetry();

EventSource + counters

EventSource: MyCSharp.HttpUserAgentParser (constant: HttpUserAgentParserEventSource.EventSourceName)

  • parse.requests (incrementing)
  • parse.duration (ms, event counter)
  • cache.hit (incrementing)
  • cache.miss (incrementing)
  • cache.size (polling)

Monitor with dotnet-counters

dotnet-counters monitor --process-id <pid> MyCSharp.HttpUserAgentParser

Telemetry (native Meters)

In addition to EventCounters, this package can emit native System.Diagnostics.Metrics instruments.

Telemetry is:

  • Opt-in: disabled by default (keeps hot path overhead-free)
  • Low overhead: measurements are only recorded when enabled

Enable meters (Fluent API)

services
	.AddHttpUserAgentParser()
	.WithMeterTelemetry();

Meter + instruments

Meter: MyCSharp.HttpUserAgentParser (constant: HttpUserAgentParserMeters.MeterName)

  • parse.requests (counter)
  • parse.duration (histogram, ms)
  • cache.hit (counter)
  • cache.miss (counter)
  • cache.size (observable gauge)

Export to OpenTelemetry

You can collect these EventCounters via OpenTelemetry metrics and export them (OTLP, Prometheus, Azure Monitor, …).

Packages you typically need:

  • OpenTelemetry
  • OpenTelemetry.Exporter.OpenTelemetryProtocol (or another exporter)
  • OpenTelemetry.Instrumentation.EventCounters

Example (minimal):

using OpenTelemetry.Metrics;
using MyCSharp.HttpUserAgentParser.Telemetry;

builder.Services.AddOpenTelemetry()
	.WithMetrics(metrics =>
	{
		metrics
			.AddEventCountersInstrumentation(options =>
			{
				options.AddEventSources(HttpUserAgentParserEventSource.EventSourceName);
			})
			.AddOtlpExporter();
	});

If you also use the MemoryCache/AspNetCore packages, add their EventSource names too.

Export native meters to OpenTelemetry

If you enabled native meters (see above), collect them via AddMeter(...):

using OpenTelemetry.Metrics;
using MyCSharp.HttpUserAgentParser.Telemetry;

builder.Services.AddOpenTelemetry()
	.WithMetrics(metrics =>
	{
		metrics
			.AddMeter(HttpUserAgentParserMeters.MeterName)
			.AddOtlpExporter();
	});

Export to Application Insights

There are two common approaches:

Collect with OpenTelemetry (see above) and export to Azure Monitor / Application Insights using an Azure Monitor exporter. This keeps your pipeline consistent and avoids custom listeners.

Typical packages (names may differ by version):

  • OpenTelemetry
  • OpenTelemetry.Instrumentation.EventCounters
  • Azure.Monitor.OpenTelemetry.Exporter

2) Custom EventListener → TelemetryClient

If you prefer a direct listener, you can attach an EventListener and forward values as custom metrics.

High-level idea:

  • Enable the EventSource
  • Parse the EventCounters payload
  • Track as Application Insights metrics

Notes:

  • This is best-effort telemetry (caches can race)
  • Keep aggregation intervals reasonable (e.g. 10s)

Showing the top 20 packages that depend on MyCSharp.HttpUserAgentParser.

Packages Downloads
Volo.Abp.AspNetCore
Package Description
20
Volo.Abp.AspNetCore
Package Description
21
Volo.Abp.AspNetCore
Package Description
23
Volo.Abp.AspNetCore
Package Description
24
Volo.Abp.AspNetCore
Package Description
25
Volo.Abp.AspNetCore
Package Description
27
Volo.Abp.AspNetCore
Package Description
28
Volo.Abp.AspNetCore
Package Description
29
Volo.Abp.AspNetCore
Package Description
31
Volo.Abp.AspNetCore
Package Description
32

Version Downloads Last updated
3.1.6 14 04/05/2026
3.1.3 11 03/07/2026
3.1.2 13 02/21/2026
3.0.28 19 09/01/2025
3.0.27 17 08/25/2025
3.0.25 16 07/04/2025
3.0.23 16 07/04/2025
3.0.21-gd594614d04 18 07/04/2025
3.0.20-g7795a06d24 20 07/04/2025
3.0.19-g3452a5347c 20 07/04/2025
3.0.18-gbf6637cea6 22 07/04/2025
3.0.13 17 07/04/2025
3.0.13-g9ebf55cc61 17 07/04/2025
3.0.12 23 07/04/2025
3.0.12-g2db20cc097 18 07/04/2025
3.0.11 25 07/04/2025
3.0.11-gd806c9c385 20 07/04/2025
3.0.10 18 07/04/2025
3.0.10-g39a7b02192 21 07/04/2025
3.0.9 18 07/04/2025
3.0.9-gffc9953931 18 07/04/2025
3.0.9-gbb914c5083 18 07/04/2025
3.0.8 17 07/04/2025
3.0.8-gc872dd36a7 16 07/04/2025
3.0.7 18 07/04/2025
3.0.7-g7326cc7952 18 07/04/2025
3.0.7-g23b089add4 22 07/04/2025
3.0.7-g16a90295af 19 07/04/2025
3.0.6 17 07/04/2025
3.0.6-g1a8d58908d 20 07/04/2025
3.0.5 19 07/04/2025
3.0.4 20 07/04/2025
3.0.3 26 07/04/2025
3.0.3-g52f717c570 21 07/04/2025
3.0.3-g2e3740f28e 17 07/04/2025
3.0.2 24 07/04/2025
3.0.2-g1ec8e12b08 17 07/04/2025
3.0.1 20 07/04/2025
2.0.5-g44d1ffded6 19 07/04/2025
2.0.3 25 07/04/2025
2.0.2 19 07/04/2025
2.0.1 19 07/04/2025
1.1.5 17 07/04/2025
1.1.4 17 07/04/2025
1.1.2 17 07/04/2025
1.1.1 20 07/04/2025
0.1.20 21 07/04/2025
0.1.19 18 07/04/2025
0.1.18 21 07/04/2025
0.1.17 17 07/04/2025
0.1.15 17 07/04/2025
0.1.13-ga54ab93e06 15 07/04/2025
0.1.11-gf9f22361b4 21 07/04/2025
0.1.11-gd2c4a82063 23 07/04/2025
0.1.10-g97d215a597 17 07/04/2025
0.1.9-gfdbeeac4d0 21 07/04/2025
0.1.7-g4f7d811228 20 07/04/2025
0.1.3-ga995c8cead 21 07/04/2025
0.1.2-g30a7553669 21 07/04/2025