解析含=符号的ConnectionString时AuthCode值末尾=丢失的问题求助
解决连接字符串中值包含=符号的解析问题
你的问题核心在于用Split('=')会把值里的所有等号都拆分,导致末尾的=被截断。我们只需要拆分第一个等号,就能完整保留值里的所有内容,包括后续的=符号。
修改后的解析代码
private void Parse(string connectionString) { var components = connectionString.Split(';'); foreach (var component in components) { var trimmedComponent = component.Trim(); if (string.IsNullOrEmpty(trimmedComponent)) continue; // 定位字段与值之间的第一个等号,只拆分这一次 var equalsIndex = trimmedComponent.IndexOf('='); if (equalsIndex == -1) throw new InvalidOperationException($"Invalid connection string component: {trimmedComponent}"); var field = trimmedComponent.Substring(0, equalsIndex).ToLower(); // 从第一个等号的下一位开始截取,保留值里的所有内容 var value = trimmedComponent.Substring(equalsIndex + 1); switch (field) { case "url": _serverUrl = value; break; case "authcode": _authcode = value; break; default: throw new InvalidOperationException($"{field} is unknown in connection settings"); } } }
方案说明
- 用
IndexOf('=')精准定位字段和值的分隔符,避免误拆分值里的=符号 - 值部分从第一个等号的下一位开始截取,不管值里包含多少个=,都会完整保留
- 增加了对无效组件的判断(没有=的情况),让代码容错性更强
关于SqlConnectionStringBuilder的补充
SqlConnectionStringBuilder是专门为SQL Server连接字符串设计的,只识别官方定义的连接关键字(比如Server、Database等),遇到url这类自定义关键字自然会报错,确实不适合你的自定义连接字符串场景。
用上面的代码测试你给出的示例连接字符串:
url=https://devunifiedinterface.appstore.com; authCode=mQLw/OWghN0s4jQhBso7o68/KGsLnzwlWux2cnv5QYu=
_authcode就能正确拿到完整的mQLw/OWghN0s4jQhBso7o68/KGsLnzwlWux2cnv5QYu=了。
内容的提问来源于stack exchange,提问作者Kanini
相关产品推荐
相关产品推荐

