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

在C# .NET Core Razor Pages中检测设备类型(桌面端/安卓/iOS)的方法

在C# .NET Core Razor Pages中检测设备类型(桌面端/安卓/iOS)的方法

问题背景

我理解你当前在VS2022中使用.NET Core 9.0开发,想要实现点击按钮给客户发送SMS的功能,并且已经明确安卓和iOS的SMS链接格式存在差异:

  • 安卓适用的SMS链接:<a href="sms:/* 填写手机号 */?body=/* 填写短信内容 */">发送短信</a>
  • iOS适用的SMS链接:<a href="sms:/* 填写手机号 */&body=/* 填写短信内容 */">发送短信</a>

现在你需要解决的核心问题是:如何在Razor Pages中判断当前访问的设备是桌面端、安卓还是iOS?

解决方案

在.NET Core Razor Pages里,我们主要通过解析请求头中的User-Agent信息来判断设备类型,下面提供两种实用的实现方式:

方式一:手动解析User-Agent字符串

这种方式不需要依赖第三方库,直接通过字符串匹配就能完成检测,步骤如下:

首先在你的PageModel类中获取并解析User-Agent:

public class SendSmsModel : PageModel
{
    // 用来存储检测到的设备类型
    public string CurrentDevice { get; set; }

    public void OnGet()
    {
        var userAgent = Request.Headers["User-Agent"].ToString().ToLower();

        if (userAgent.Contains("android"))
        {
            CurrentDevice = "Android";
        }
        else if (userAgent.Contains("iphone") || userAgent.Contains("ipad") || userAgent.Contains("ipod"))
        {
            CurrentDevice = "iOS";
        }
        else
        {
            // 默认判定为桌面端,也可以进一步细化桌面浏览器类型
            CurrentDevice = "Desktop";
        }
    }
}

然后在对应的Razor视图(比如SendSms.cshtml)中,根据设备类型渲染对应的短信链接:

@page
@model SendSmsModel

@{
    ViewData["Title"] = "发送短信";
}

<h1>发送短信</h1>

@if (Model.CurrentDevice == "Android")
{
    <a href="sms:13800138000?body=您好,这是来自系统的通知短信" class="btn btn-primary">发送短信</a>
}
else if (Model.CurrentDevice == "iOS")
{
    <a href="sms:13800138000&body=您好,这是来自系统的通知短信" class="btn btn-primary">发送短信</a>
}
else
{
    <div class="alert alert-info">当前桌面设备不支持直接打开短信功能,请使用移动设备访问</div>
}

方式二:使用第三方库简化检测(可选)

如果觉得手动解析User-Agent太麻烦,可以借助成熟的第三方库来处理,比如UAParser:

  1. 先通过NuGet包管理器安装UAParser
  2. 在PageModel中使用库来解析设备信息:
using UAParser;

public class SendSmsModel : PageModel
{
    public string CurrentDevice { get; set; }

    public void OnGet()
    {
        var parser = Parser.GetDefault();
        var clientInfo = parser.Parse(Request.Headers["User-Agent"].ToString());

        if (clientInfo.Device.Family.Contains("Android"))
        {
            CurrentDevice = "Android";
        }
        else if (clientInfo.Device.Family.Contains("iPhone") || clientInfo.Device.Family.Contains("iPad"))
        {
            CurrentDevice = "iOS";
        }
        else
        {
            CurrentDevice = "Desktop";
        }
    }
}

视图部分的代码和方式一完全一致,根据CurrentDevice的值渲染对应的链接即可。

小提示

  • User-Agent字符串可能会被部分浏览器或设备修改,所以这种检测方式不是100%精准,但在绝大多数业务场景下都能满足需求。
  • 对于桌面端,建议给出明确提示,因为桌面浏览器一般无法直接唤起短信应用。

备注:内容来源于stack exchange,提问作者Fillo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 10:18:07