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

使用WebConfigurationManager读取端口转Int32触发FormatException求助

解决Int32.Parse转换配置端口抛出FormatException的问题

兄弟,我敢打赌你遇到的是隐形字符搞的鬼!你看到的portString在调试器里显示是44311,但它大概率藏了肉眼看不见的Unicode特殊字符(比如零宽空格、左/右方向标记这类),这些字符会被Int32.Parse判定为非法格式,导致报错——而你硬编码的时候是手动输入的纯数字,自然不会有这个问题,和异步方法完全没关系。

验证方法:找出隐形字符

你可以先把portString的每个字符的Unicode编码打出来,就能看到猫腻:

foreach (char c in portString)
{
    Console.WriteLine($"字符: '{c}', Unicode编码: U+{((int)c):X4}");
}

运行后你会发现,除了数字4、4、3、1、1之外,可能还会出现类似U+200E(左到右标记)这类奇怪的编码,这就是罪魁祸首。

解决办法

1. 彻底清理配置文件

直接打开你的配置文件,手动重新输入一遍port的值,不要复制粘贴,确保没有带入任何隐形字符。这是最根本的解决方式。

2. 代码层面过滤非法字符

如果担心以后再出现类似情况,可以在转换前先过滤掉非数字的字符:

// 只保留字符串中的数字字符
var cleanPortString = new string(portString.Where(char.IsDigit).ToArray());
var port = Int32.Parse(cleanPortString);

3. 更安全的转换方式

推荐使用int.TryParse结合字符过滤,这样即使有问题也不会崩溃,还能记录异常信息:

var cleanPortString = new string(portString.Where(char.IsDigit).ToArray());
if (int.TryParse(cleanPortString, out var port))
{
    // 正常使用端口
}
else
{
    // 记录日志,方便排查问题
    Console.WriteLine($"端口转换失败,原始值: '{portString}'");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:28:58