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

在IIS部署的ASP.NET Core/.NET 8后端获取用户设备名的方法咨询

能不能在IIS部署的ASP.NET Core/.NET 8后端获取用户设备名称?

可以获取,但不能直接通过服务器端的系统API拿到——你之前得到IIS服务器名称,是因为误用了服务器端的环境/系统信息API(比如Environment.MachineName),这类API本来就返回宿主服务器的信息,和客户端用户设备无关。

用户的设备名称属于客户端浏览器环境的信息,必须由客户端先收集,再通过API请求传递给后端。具体实现步骤如下:

1. 客户端(Blazor)获取设备信息

Blazor本身无法直接访问浏览器的API,需要通过JavaScript互操作来获取。常见的两种方式:

方式一:解析用户代理字符串(兼容所有浏览器)

在Blazor项目的wwwroot下创建一个JS文件(比如deviceUtils.js),添加以下函数:

window.getDeviceInfo = function() {
    return navigator.userAgent;
};

然后在Blazor组件中调用这个函数:

@inject IJSRuntime JSRuntime

private async Task<string> GetUserDeviceInfo()
{
    return await JSRuntime.InvokeAsync<string>("getDeviceInfo");
}

解析后的userAgent字符串会包含设备品牌、型号、浏览器等信息(比如Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1)。

方式二:使用Navigator User Agent Data(现代浏览器支持)

如果目标用户使用现代浏览器(Chrome 89+/Edge 89+等),可以用更结构化的API:

window.getDeviceInfo = async function() {
    if ('userAgentData' in navigator) {
        const data = await navigator.userAgentData.getHighEntropyValues(['platform', 'model', 'brand']);
        return JSON.stringify({
            Brand: data.brand,
            Model: data.model,
            Platform: data.platform
        });
    } else {
        // 降级到userAgent
        return JSON.stringify({ UserAgent: navigator.userAgent });
    }
};

2. 将设备信息传递给后端API

拿到设备信息后,在调用后端API时将其传递过去,常见的两种方式:

方式一:通过自定义HTTP请求头传递

@inject HttpClient Http

private async Task CallApiWithDeviceInfo()
{
    var deviceInfo = await GetUserDeviceInfo();
    Http.DefaultRequestHeaders.Add("X-Device-Info", deviceInfo);
    
    var response = await Http.GetFromJsonAsync<YourResponseModel>("api/your-endpoint");
}

方式二:作为请求体/参数传递

如果需要更结构化的传递,可以把设备信息封装到请求模型中:

public class ApiRequest
{
    public string DeviceInfo { get; set; }
    // 其他请求参数
}

// 调用API时
var request = new ApiRequest
{
    DeviceInfo = await GetUserDeviceInfo(),
    // 填充其他参数
};
var response = await Http.PostAsJsonAsync("api/your-endpoint", request);

3. 后端API接收设备信息

在后端的API控制器中,读取传递过来的设备信息:

从请求头读取

[ApiController]
[Route("api/[controller]")]
public class YourController : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        if (Request.Headers.TryGetValue("X-Device-Info", out var deviceInfo))
        {
            // 处理设备信息
            return Ok(new { DeviceInfo = deviceInfo.ToString() });
        }
        return Ok(new { DeviceInfo = "未获取到设备信息" });
    }
}

从请求体读取

[HttpPost]
public IActionResult Post([FromBody] ApiRequest request)
{
    var deviceInfo = request.DeviceInfo;
    // 处理设备信息
    return Ok();
}

注意事项

  • 浏览器可能会限制某些高熵设备信息的获取,部分隐私保护严格的浏览器可能会返回模糊的设备数据。
  • 不要依赖设备信息做核心业务逻辑(比如身份验证),因为这些信息可以被篡改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 14:34:51