C#拼接FTP绝对与相对URL出现URI格式无法识别异常怎么解决?
FTP UriFormatException异常原因及解决方法
异常原因
从报错栈可以定位到异常抛出在Uri serverUri = new Uri(host);这行代码,本质是host变量不符合URI标准格式要求,最常见的原因是host变量缺失FTP协议前缀,比如你只填写了FTP的IP或域名,没有添加ftp://开头的协议标识,导致Uri类无法识别地址类型。
其他可能触发该错误的原因:host为空/NULL、包含未转义的非法字符、存在多余的空格或换行符。
解决方案
- 首先修正host变量的格式,必须以
ftp://作为前缀,示例:- 错误格式:
192.168.3.5、ftp.mydomain.com - 正确格式:
ftp://192.168.3.5、ftp://ftp.mydomain.com
- 错误格式:
- 增加格式校验逻辑,避免运行时崩溃,可直接替换原方法中的Uri初始化部分代码:
// 自动补全协议前缀,兼容ftps协议场景 if (!host.StartsWith("ftp://", StringComparison.OrdinalIgnoreCase) && !host.StartsWith("ftps://", StringComparison.OrdinalIgnoreCase)) { host = "ftp://" + host; } // 安全校验Uri格式,避免直接抛出异常 if (!Uri.TryCreate(host, UriKind.Absolute, out Uri serverUri)) { Debug.LogError($"FTP主机地址格式非法:{host}"); return new string[] { "" }; } // 直接拼接路径即可,不需要手动加斜杠避免强制跳转到根目录的问题 Uri fullUri = new Uri(serverUri, directory);
- 可临时添加日志打印最终生成的fullUri值,方便后续排查路径问题:
Debug.Log($"当前请求的FTP完整地址:{fullUri.AbsoluteUri}");
内容的提问来源于stack exchange,提问作者BtStudios
相关产品推荐
相关产品推荐

