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

.NET Core 7中如何读取浏览器信息?ASP.NET MVC 5代码迁移适配

迁移ASP.NET MVC 5 VB代码至.NET Core 7 C#解决方案

核心变化说明

ASP.NET Core 7中移除了HttpContext.Current静态属性,需通过依赖注入或控制器自带的HttpContext属性获取请求上下文;同时不再内置浏览器设备信息解析能力,要实现等效功能需解析请求的User-Agent头。

实现步骤

1. 定义C#版DisplaySettings类

先将原VB实体类转换为C#:

public class DisplaySettings
{
    public bool IsMobileDevice { get; set; }
    public string MobileDeviceManufacturer { get; set; }
    public string MobileDeviceModel { get; set; }
    public int? ScreenHeight { get; set; }
    public int? ScreenWidth { get; set; }
}

2. 获取HttpContext的方式

  • 控制器中:直接使用控制器自带的HttpContext属性即可,无需额外配置。
  • 服务类中:需要注入IHttpContextAccessor访问当前请求上下文,记得在Program.cs中注册服务:
    builder.Services.AddHttpContextAccessor();
    

3. 解析User-Agent获取设备信息

推荐使用成熟的第三方NuGet包UserAgentParser.NET解析设备信息,它能准确识别设备类型、厂商、型号等内容。

安装NuGet包

Install-Package UserAgentParser
# 或使用.NET CLI
dotnet add package UserAgentParser

等效功能的C#实现

控制器内实现
using UserAgentParser;

public class YourController : Controller
{
    private readonly IUserAgentParser _userAgentParser;

    public YourController(IUserAgentParser userAgentParser)
    {
        _userAgentParser = userAgentParser;
    }

    private DisplaySettings GetDisplaySettings()
    {
        var userAgent = HttpContext.Request.Headers.UserAgent.ToString();
        var parsedResult = _userAgentParser.Parse(userAgent);

        return new DisplaySettings
        {
            IsMobileDevice = parsedResult.Device.IsMobile,
            MobileDeviceManufacturer = parsedResult.Device.Manufacturer,
            MobileDeviceModel = parsedResult.Device.Model,
            // 注意:UserAgentParser.NET不直接提供屏幕分辨率,需通过前端传递
            ScreenHeight = null,
            ScreenWidth = null
        };
    }
}
服务类内实现
using UserAgentParser;

public class YourService
{
    private readonly IHttpContextAccessor _httpContextAccessor;
    private readonly IUserAgentParser _userAgentParser;

    public YourService(IHttpContextAccessor httpContextAccessor, IUserAgentParser userAgentParser)
    {
        _httpContextAccessor = httpContextAccessor;
        _userAgentParser = userAgentParser;
    }

    public DisplaySettings GetDisplaySettings()
    {
        var userAgent = _httpContextAccessor.HttpContext?.Request.Headers.UserAgent.ToString();
        if (string.IsNullOrEmpty(userAgent))
        {
            return new DisplaySettings();
        }

        var parsedResult = _userAgentParser.Parse(userAgent);

        return new DisplaySettings
        {
            IsMobileDevice = parsedResult.Device.IsMobile,
            MobileDeviceManufacturer = parsedResult.Device.Manufacturer,
            MobileDeviceModel = parsedResult.Device.Model,
            ScreenHeight = null,
            ScreenWidth = null
        };
    }
}

屏幕分辨率的补充说明

ASP.NET MVC 5中的ScreenPixelsHeight/ScreenPixelsWidth依赖浏览器配置信息,现代浏览器不会通过User-Agent传递这类数据。若需要真实屏幕尺寸,建议通过前端JavaScript获取后,将数据通过请求头、查询参数或请求体传递到后端:

前端示例代码

const screenWidth = window.screen.width;
const screenHeight = window.screen.height;
// 发送请求时携带参数
fetch('/api/your-endpoint', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'X-Screen-Width': screenWidth,
        'X-Screen-Height': screenHeight
    }
});

后端获取方式

int? screenWidth = null;
if (int.TryParse(HttpContext.Request.Headers["X-Screen-Width"], out var width))
{
    screenWidth = width;
}

int? screenHeight = null;
if (int.TryParse(HttpContext.Request.Headers["X-Screen-Height"], out var height))
{
    screenHeight = height;
}

无第三方库的替代方案

若不想引入外部依赖,可通过简单字符串匹配判断移动设备(准确性较低,仅适用于基础场景):

private bool IsMobileDevice(string userAgent)
{
    var mobileKeywords = new[] { "mobile", "android", "iphone", "ipad", "windows phone" };
    return mobileKeywords.Any(keyword => userAgent.IndexOf(keyword, StringComparison.OrdinalIgnoreCase) >= 0);
}

内容的提问来源于stack exchange,提问作者user22019322

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:18:34