You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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字符串:

  1. 首先安装适合ASP.NET Core 2.0的UAParser NuGet包(注意选择兼容的版本,比如2.x系列)
  2. 在Startup.cs的ConfigureServices方法中注册服务:
using UAParser;

public void ConfigureServices(IServiceCollection services)
{
    // 注册UAParser的解析器实例
    services.AddSingleton<IParser>(Parser.GetDefault());
    // 其他服务注册代码...
}
  1. 在控制器中注入并使用:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:18:06