A .NET Core wrapper for the ua-parser library
$ dotnet add package UAParser.CoreThis is the ASP.NET Core implementation of ua-parser.
The implementation uses the shared regex patterns and overrides from regexes.yaml (found in uap-core). The assembly embeds the latest regex patterns (enabled through a node module) which are loaded into the default parser. You can create a parser with more updated regex patterns by using the static methods on Parser to pass in specific patterns in yaml format.
You can then build and run the tests by
dotnet restore UAParser.Core.sln
dotnet test UAParser.Core.sln
To pull the latest regexes into the project:
npm install
grunt
Step 1: Install the UAParser.Core nuget package
Install-Package UAParser.Core
Step 2: Enable the browser detection service inside the ConfigureServices method of Startup.cs.
public void ConfigureServices(IServiceCollection services)
{
// Add user agent service
services.AddUserAgentParser();
services.AddMvc();
}
Step 3: Inject IUserAgentParser to your controller class or view file or middleware and access the ClientInfo property.
Example usage in controller code
public class HomeController : Controller
{
private readonly IUserAgentParser userAgentParser;
public HomeController(IUserAgentParser parser)
{
this.userAgentParser = parser;
}
public IActionResult Index()
{
var clientInfo = this.userAgentParser.ClientInfo;
// Use ClientInfo object as needed.
return View();
}
}Example usage in view code
@inject UAParser.Interfaces.IUserAgentParser parser
<h2> @parser.ClientInfo.Browser.Family </h2>
<h3> @parser.ClientInfo.Browser.Version </h3>
<h3> @parser.ClientInfo.OS.ToString() </h3>
<h3> @parser.ClientInfo.Device.ToString() </h3>
Example usage in custom middlware
You can inject the IUserAgentParser to the InvokeAsync method.
public class MyCustomMiddleware
{
private RequestDelegate next;
public MyCustomMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task InvokeAsync(HttpContext httpContext, IUserAgentParser parser)
{
var clientInfo = parser.ClientInfo;
if (clientInfo.Browser.Family == "Edge")
{
await httpContext.Response.WriteAsync("Have you tried the new chromuim based edge ?");
}
else
{
await this.next.Invoke(httpContext);
}
}
}