如何在ASP.NET Core 2.0中获取当前请求的浏览器名称及版本
在ASP.NET Core 2.0中获取当前请求的浏览器名称和版本
嘿,我懂你碰到的这个坑了——之前尝试获取浏览器信息居然返回了客户端上所有安装的浏览器,这完全不是你要的当前请求的那个浏览器对吧?别着急,咱们来解决这个问题:
核心思路
关键是要从当前请求的User-Agent请求头里解析信息,因为这个头是当前发起请求的浏览器主动发送过来的,只会包含它自己的标识,而不是去读取客户端本地的已安装浏览器列表(这就是之前方法出错的原因)。
方法一:手动解析User-Agent字符串
如果你不想依赖第三方包,可以自己写简单的解析逻辑,覆盖常见的浏览器类型:
首先在控制器的Action里获取User-Agent:
// 直接从当前请求的Header中获取User-Agent字符串 var userAgent = HttpContext.Request.Headers["User-Agent"].ToString();
然后写一个解析方法,提取浏览器名称和版本:
public (string BrowserName, string Version) ParseBrowserInfo(string userAgent) { if (string.IsNullOrWhiteSpace(userAgent)) return ("未知浏览器", "未知版本"); // 处理Chrome浏览器 if (userAgent.Contains("Chrome/") && !userAgent.Contains("Edg/")) { var versionSegment = userAgent.Split(new[] { "Chrome/" }, StringSplitOptions.None)[1]; var version = versionSegment.Split(' ')[0]; return ("Chrome", version); } // 处理基于Chromium的Edge浏览器 else if (userAgent.Contains("Edg/")) { var versionSegment = userAgent.Split(new[] { "Edg/" }, StringSplitOptions.None)[1]; var version = versionSegment.Split(' ')[0]; return ("Edge (Chromium)", version); } // 处理Firefox浏览器 else if (userAgent.Contains("Firefox/")) { var versionSegment = userAgent.Split(new[] { "Firefox/" }, StringSplitOptions.None)[1]; var version = versionSegment.Split(' ')[0]; return ("Firefox", version); } // 处理IE浏览器 else if (userAgent.Contains("MSIE ") || userAgent.Contains("Trident/")) { string version = "未知版本"; if (userAgent.Contains("MSIE ")) { var versionSegment = userAgent.Split(new[] { "MSIE " }, StringSplitOptions.None)[1]; version = versionSegment.Split(';')[0]; } else if (userAgent.Contains("Trident/")) { var tridentVersion = userAgent.Split(new[] { "Trident/" }, StringSplitOptions.None)[1].Split('.')[0]; // Trident版本对应IE版本:Trident/7.0=IE11,Trident/6.0=IE10,以此类推 version = $"IE {int.Parse(tridentVersion) + 4}"; } return ("Internet Explorer", version); } // 其他浏览器可以根据需求继续添加判断逻辑 else { return ("未知浏览器", "未知版本"); } }
在Action里调用这个方法即可:
public IActionResult Index() { var userAgent = HttpContext.Request.Headers["User-Agent"].ToString(); var browserInfo = ParseBrowserInfo(userAgent); // 可以把结果传给View或者直接使用 ViewBag.BrowserName = browserInfo.BrowserName; ViewBag.BrowserVersion = browserInfo.Version; return View(); }
方法二:使用第三方NuGet包简化解析
如果不想自己写解析逻辑,可以用成熟的第三方包UAParser,它能帮你轻松解析各种User-Agent字符串:
- 首先安装适合ASP.NET Core 2.0的
UAParserNuGet包(注意选择兼容的版本,比如2.x系列) - 在
Startup.cs的ConfigureServices方法中注册服务:
using UAParser; public void ConfigureServices(IServiceCollection services) { // 注册UAParser的解析器实例 services.AddSingleton<IParser>(Parser.GetDefault()); // 其他服务注册代码... }
- 在控制器中注入并使用:
private readonly IParser _uaParser; // 通过构造函数注入解析器 public HomeController(IParser uaParser) { _uaParser = uaParser; } public IActionResult Index() { var userAgent = HttpContext.Request.Headers["User-Agent"].ToString(); var clientInfo = _uaParser.Parse(userAgent); // 获取浏览器名称和版本 var browserName = clientInfo.UA.Family; var browserVersion = $"{clientInfo.UA.Major}.{clientInfo.UA.Minor}"; ViewBag.BrowserInfo = $"{browserName} {browserVersion}"; return View(); }
这样就能准确获取到当前发起请求的浏览器名称和版本啦,再也不会拿到客户端所有安装的浏览器了~
内容的提问来源于stack exchange,提问作者Md. Al-Amin
相关产品推荐
相关产品推荐

