如何将GitHub SSH URL正确转换为C# Uri对象?
解决C# Uri解析GitHub SSH URL的格式异常问题
问题原因
GitHub的SSH URL格式git@github.com:user/project.git属于Git的简化写法,并非标准的SSH URI格式。当你直接拼接成ssh://git@github.com:user/project.git时,C#的Uri类会将github.com后的冒号识别为端口分隔符,而user不是有效的数字端口号,因此抛出UriFormatException。
解决方案
需要将Git简化格式转换为标准SSH URI格式:把@后的第一个冒号替换为斜杠,让路径部分以斜杠开头。
代码示例
string gitSshUrl = "git@github.com:user/project.git"; // 找到@之后的第一个冒号位置 int colonPosition = gitSshUrl.IndexOf(':', gitSshUrl.IndexOf('@') + 1); // 构建标准SSH URI字符串 string standardSshUri = $"ssh://{gitSshUrl.Substring(0, colonPosition)}/{gitSshUrl.Substring(colonPosition + 1)}"; // 创建Uri实例 Uri siteUri = new Uri(standardSshUri);
直接使用标准格式
如果已经明确目标URL,直接用标准SSH URI格式创建实例即可:
Uri siteUri = new Uri("ssh://git@github.com/user/project.git");
补充说明
标准SSH URI的格式为ssh://[user@]host[:port]/path,其中冒号仅用于指定数字端口。Git的简化写法将路径前的斜杠替换为冒号,这是Git特有的语法,不符合URI通用规范,因此无法被Uri类直接解析。
内容的提问来源于stack exchange,提问作者uenz
相关产品推荐
相关产品推荐

