Ng.UserAgentService 3.0.0

dotnet add package Ng.UserAgentService --version 3.0.0
NuGet\Install-Package Ng.UserAgentService -Version 3.0.0
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="Ng.UserAgentService" Version="3.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Ng.UserAgentService --version 3.0.0
#r "nuget: Ng.UserAgentService, 3.0.0"
#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 Ng.UserAgentService as a Cake Addin
#addin nuget:?package=Ng.UserAgentService&version=3.0.0

// Install Ng.UserAgentService as a Cake Tool
#tool nuget:?package=Ng.UserAgentService&version=3.0.0

UserAgentService

<a href="https://www.nuget.org/packages/Ng.UserAgentService"><img src="https://img.shields.io/nuget/v/Ng.UserAgentService.svg" alt="NuGet Version" /></a> <a href="https://www.nuget.org/packages/Ng.UserAgentService"><img src="https://img.shields.io/nuget/dt/Ng.UserAgentService.svg" alt="NuGet Download Count" /></a>

A service to parse user-agent strings in C#. UserAgentService is extremely fast because it uses in-memory caching. UserAgentService only looks at the first 512 characters of the useragent string, it ignores the rest of the string. Most user-agent strings are within this limit but this limitation is introduced to protect itself from malicious, extremely long, hand crafted, user-agent strings.

Dependancies

Microsoft.Extensions.Caching.Memory
Microsoft.Extensions.Options

Installing

Install from Nuget

Install-Package Ng.UserAgentService

Usage

Console application

using Ng.Services;
...
//You do not have to specify any settings if you want to use the defaults
var settings = new UserAgentSettings
{
    CacheSizeLimit = 20000, //Default: 10000
    CacheSlidingExpiration = TimeSpan.FromDays(1), //Default: TimeSpan.FromDays(3)
    UaStringSizeLimit = 256, //Default: 512
};
var userAgentService = new UserAgentService(settings);

var ua = userAgentService.Parse("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0");

var isBrowser = ua.IsBrowser; // true
var isRobot = ua.IsRobot; // false
var isMobile = ua.IsMobile; // false

var platform = ua.Platform; // Windows 7
var bowser = ua.Browser; // Firefox
var version = ua.BrowserVersion; // 47.0
var mobile = ua.Mobile; // empty string
var robot = ua.Robot; // empty string

ASP.NET Core

Register service with dependency injection in Startup.cs

using Ng.Services;
...
public void ConfigureServices(IServiceCollection services)
{
    services.AddUserAgentService(); //Is equivalent to services.AddSingleton<IUserAgentService, UserAgentService>();

    or

    services.AddUserAgentService(options => {
        options.CacheSizeLimit = 20000; //Default: 10000
        options.CacheSlidingExpiration = TimeSpan.FromDays(1); //Default: TimeSpan.FromDays(3)
        options.UaStringSizeLimit = 256; //Default: 512
    });

    or
    
    services.AddSingleton<IUserAgentService, UserAgentService>(); //Is equivalent to services.AddUserAgentService();
}

Inject IUserAgentService into a Controller or wherever you like

using Ng.Services;
...
public class MyController
{
    public MyController(IUserAgentService userAgentService) // <-- Inject IUserAgentService here
    {
        string userAgentString = Request.Headers["User-Agent"].ToString();
        UserAgent ua = userAgentService.Parse(userAgentString);
    }
}

License

This project is licensed under the MIT License.

Contributions

Contributions are welcome.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  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 (1)

Showing the top 1 NuGet packages that depend on Ng.UserAgentService:

Package Downloads
SplatDev.Umbraco.Plugins.SimpleAnalytics

Analytics script and dashboard for Umbraco v8.18.8

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on Ng.UserAgentService:

Repository Stars
streetwriters/notesnook-sync-server
Sync server for Notesnook (not yet self-hostable)
Version Downloads Last updated
3.0.0 46 3/27/2024
1.1.2 22,066 10/27/2022
1.1.1 2,658 9/29/2022
1.1.0 2,913 8/23/2022
1.0.3 34,677 3/10/2021
1.0.2 2,445 11/10/2020
1.0.1 5,989 7/24/2020
1.0.0 2,084 4/6/2020

Updating dependencies