ASP.NET Core 快速轻量级的浏览器检测和设备检测库
在 .NET Framework 4.7 中那样,通过 HttpContext.Request 的 Browser 属性轻松获取发起 HTTP 请求的浏览器信息,ASP.NET Core 并未直接提供这一功能,现在有了 BrowserDetector 这个强大的 NuGet 包,你可以在 ASP.NET Core 应用中轻松实现浏览器、设备类型以及操作系统的检测。
BrowserDetector 支持以下 .NET 框架版本: .NET 6/7/8
如何使用 BrowserDetector
安装 NuGet 包
首先需要安装 BrowserDetector NuGet 包
Install-Package Shyjus.BrowserDetector
启用浏览器检测服务
在你的启动代码中,调用 IServiceCollection 上的 AddBrowserDetection 方法来启用浏览器检测服务:
services.AddBrowserDetection();
注入并使用 IBrowserDetector
接下来,你可以在控制器类、视图文件或中间件中注入 IBrowserDetector,并访问其 Browser 属性来获取浏览器相关信息。
在控制器中的使用示例
public class HomeController : Controller
{
private readonly IBrowserDetector browserDetector;
public HomeController(IBrowserDetector browserDetector)
{
this.browserDetector = browserDetector;
}
public IActionResult Index()
{
var browser = this.browserDetector.Browser;
// 按需使用 browser 对象
return View();
}
}
在视图中的使用示例
@inject Shyjus.BrowserDetection.IBrowserDetector browserDetector
<h2>@browserDetector.Browser.Name</h2>
<h3>@browserDetector.Browser.Version</h3>
<h3>@browserDetector.Browser.OS</h3>
<h3>@browserDetector.Browser.DeviceType</h3>
在自定义中间件中的使用
你还可以将 IBrowserDetector 注入到中间件的 InvokeAsync 方法中
public class MyCustomMiddleware
{
private RequestDelegate next;
public MyCustomMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task InvokeAsync(HttpContext httpContext, IBrowserDetector browserDetector)
{
var browser = browserDetector.Browser;
if (browser.Type == BrowserType.Edge)
{
await httpContext.Response.WriteAsync("Have you tried the new chromuim based edge ?");
}
else
{
await this.next.Invoke(httpContext);
}
}
}
解读 IBrowserDetector.Name 返回的名称值
IBrowserDetector.Name 返回的名称值具有特定含义,以下是常见名称的解释:
- Firefox:Firefox 浏览器。
- EdgeChromium:基于 Chromium 的新版 Microsoft Edge 浏览器。
- Edge:旧版 Edge 浏览器。
- Safari:Safari 浏览器。
- Chrome:Chrome 浏览器。
性能影响
你可能会关心添加 BrowserDetector 包对应用性能的影响。经过基准测试,在 Safari 和 Chrome 桌面用户代理上的测试结果显示,检测结果的返回时间大约在 1 微秒 左右。堆内存分配会根据输入的不同而有所变化。以下是具体的测试数据:
| 方法 | 平均值 |
|---|---|
| Chrome_Windows | 1.057 us |
| Safari_Windows | 1.093 us |
1 微秒仅相当于一百万分之一秒,这意味着 BrowserDetector 对性能的影响微乎其微,你完全可以放心使用它来为你的 ASP.NET Core Web API 应用增添浏览器检测功能。
仓库地址:https://github.com/kshyju/BrowserDetector

ASP.NET Core 快速轻量级的浏览器检测和设备检测库的更多相关文章
- ASP.NET Core 快速入门(Razor Pages + Entity Framework Core)
引子 自从 2009 年开始在博客园写文章,这是目前我写的最长的一篇文章了. 前前后后,我总共花了 5 天的时间,每天超过 3 小时不间断写作和代码调试.总共有 8 篇文章,每篇 5~6 个小结,总截 ...
- [外包]!采用asp.net core 快速构建小型创业公司后台管理系统(六.结语)
到这里就结束了,真的结束了,源码会在文末分享! 另外录了两个视频,对这个系统进行了演示! 做有意义的事情,原此生无悔! 视频地址:使用asp.net core 快速构建权限管理模块1 使用asp.ne ...
- ASP.NET Core快速入门--学习笔记系列文章索引目录
课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 抓住国庆假期的尾巴完成了此系列课程的学习笔记输出! ASP.NET Core快 ...
- 【笔记目录2】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总
当前标签: ASP.NET Core快速入门 共2页: 上一页 1 2 任务27:Middleware管道介绍 GASA 2019-02-12 20:07 阅读:15 评论:0 任务26:dotne ...
- 【笔记目录1】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总
当前标签: ASP.NET Core快速入门 共2页: 1 2 下一页 任务50:Identity MVC:DbContextSeed初始化 GASA 2019-03-02 14:09 阅读:16 ...
- ASP.NET Core 快速入门【第二弹-实战篇】
上篇讲了asp.net core在linux上的环境部署.今天我们将做几个小玩意实战一下.用到的技术和工具有mysql.websocket.AngleSharp(爬虫html解析).nginx多站点部 ...
- ASP.NET Core 快速入门(实战篇)
上篇讲了<asp.net core在linux上的环境部署>.今天我们将做几个小玩意实战一下.用到的技术和工具有mysql.websocket.AngleSharp(爬虫html解析).n ...
- ASP.NET Core 快速入门(环境篇)
[申明]:本人.NET Core小白.Linux小白.MySql小白.nginx小白.而今天要说是让你精通Linux ... 的开机与关机.nginx安装与部署.Core的Hello World .. ...
- ASP.NET Core快速入门学习笔记(第1章:介绍与引入)
课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务1:课程介绍 任务2:环境安装 下载地址:https://dotnet.m ...
- 【转】ASP.NET Core 快速入门(环境篇)
原文链接:http://www.cnblogs.com/zhaopei/p/netcore.html [申明]:本人.NET Core小白.Linux小白.MySql小白.nginx小白.而今天要说是 ...
随机推荐
- CF1019C Sergey's problem
CF1019C Sergey's problem 很巧妙的构造题. 思路 首先我们可以把这题分成两个部分: 解决覆盖问题 解决边冲突问题 \(vis_i\) 为 \(i\) 点是否被覆盖的标记,\(c ...
- 1000+节点、200+集群,Slack如何利用Karpenter降本增效?
原文首发于云妙算 Slack 是一款 AI 工作管理和协作平台.随着业务需求的增长,Slack 对其内部计算编排平台进行了重大改造,以增强可扩展性.提高效率并降低成本.该内部平台的代号为"B ...
- 7、listener监听
启动远程图形界面登录的工具 [root@db11g ~]# vncserver 监听 监听的启动 [oracle@db11g ~]$ lsnrctl start 判断监听是否启动 [oracle@db ...
- PA1-碎碎念
part 1 8.27 方便管理,主要是想熟悉下git的操作 先创建并且切换到一个新的分支: git commit --allow-empty -am "before starting PA ...
- viper读取配置文件
//方法一 func readConfig1(path, filename, filetype string) interface{} { viper.AddConfigPath(path) vipe ...
- 鸿蒙NEXT元服务:收藏、卡片、用户协议、隐私声明、分享链接、评分与评论
相比应用,元服务的功能藏的比较深,这里记录一下常用功能的位置. 1.收藏(添加至我的服务) 打开元服务-->右上角四个点-->添加至我的服务-->手机滑到负一屏-->点击&qu ...
- 关于ConditionalOnClass注解
1. pom文件<optional>标签 在Java开发中,大家肯定在pom文件中添加过依赖(现在没有,以后也肯定会有的),不知道大家对<optional>标签的了解有多少,或 ...
- fastadmin-自定义
1.样式重置 渲染完毕后再展示 [v-cloak]{ display: none; } <div id="app" v-cloak></div> 去除内置的 ...
- OpenTelemetry 101:面向 IT 领导者和爱好者的非技术指南
如果您从事软件开发. SRE或DevOps工作,您可能听说过可观察性.遥测和跟踪等术语.这些概念对于理解应用程序在生产环境中的行为至关重要,并且它们是现代软件开发实践的重要组成部分. 您可能还听说过在 ...
- .NET Core 锁(Lock)底层原理浅谈
CPU原子操作 原子操作,指一段逻辑要么全部成功,要么全部失败.概念上类似数据库事物(Transaction). CPU能够保证单条汇编的原子性,但不保证多条汇编的原子性 那么在这种情况下,那么CPU ...