移动端设备检测报错:System.ArgumentOutOfRangeException(参数'start'越界)
异常原因及解决办法
原因
异常触发在第12行的httpContext.AsSpan(0, 4)代码。当传入的httpContext字符串长度小于4(包括字符串为null或者空串的情况)时,强行截取前4个字符的操作会超出字符串的有效范围,从而抛出System.ArgumentOutOfRangeException。
修复方案
先对httpContext做合法性校验,同时确保截取Span时的长度参数不超过字符串实际长度:
修改后的IsMobileDevice方法代码:
public static bool IsMobileDevice(string httpContext) { if (string.IsNullOrEmpty(httpContext)) { return false; } Regex b = RegexIsMobileDeviceB(); Regex v = RegexIsMobileDeviceV(); // 取实际长度和4的最小值,避免超出范围 int validLength = Math.Min(httpContext.Length, 4); return b.IsMatch(httpContext) || v.IsMatch(httpContext.AsSpan(0, validLength)); }
额外说明
- 先判断
httpContext是否为空或null,能避免后续正则匹配时出现空引用问题。 - 用
Math.Min限制截取长度,当字符串长度不足4时,直接用整个字符串做匹配,既符合原逻辑的意图(匹配开头部分),又不会触发范围异常。
内容的提问来源于stack exchange,提问作者ioxoi
相关产品推荐
相关产品推荐

