使用 = 符号解析 ConnectionString

Parse ConnectionString with = symbol

我正在尝试解析连接字符串并提取要在代码中使用的值。问题是我的连接字符串中的一个值有一个 = 符号。

这是我的代码

private void Parse(string connectionString)
{
    var components = connectionString.Split(';');
    foreach (var component in components)
    {
        if (string.IsNullOrEmpty(component)) continue;

        var fieldValuePair = component.Trim().Split('=');//Problematic? Don't know how to fix!
        var field = fieldValuePair[0].ToLower();
        var value = fieldValuePair[1];

        switch (field)
        {
            case "url":
                _serverUrl = value;
                break;
            case "authcode":
                _authcode = value;
                break;
            default: throw new InvalidOperationException($"{field} Value is unknown in connection settings");
        }
    }
}

问题是这段代码在所有情况下都有效,除非 authcode 中有一个 =。

因此,此连接字符串未提供正确的详细信息。

<add name="ServerAuthCodeString" connectionString="url=https://devunifiedinterface.appstore.com; authCode=mQLw/OWghN0s4jQhBso7o68/KGsLnzwlWux2cnv5QYu=" />

我得到的输出是

_authcode = mQLw/OWghN0s4jQhBso7o68/KGsLnzwlWux2cnv5QYu //Missing = at the end

我需要的是

_authcode = mQLw/OWghN0s4jQhBso7o68/KGsLnzwlWux2cnv5QYu=

是的,有一个 question 讨论连接字符串。 但是,答案似乎仍未解决带有 = 符号的问题。

比如这个comment专门讲的。

SqlConnectionStringBuilder 对我不起作用。如果我传入我的 connectionString,它会抱怨关键字 url 无效。

您需要从 Split 函数中指定 return 拆分的字符串数量,在您的情况下是 2.

var fieldValuePair = component.Trim().Split(new char[] { '=' }, 2);

所以这会给你,

  • 索引 0 处的第一个拆分字符串:_authcode
  • 索引 1 处的第二个拆分字符串:mQLw/OWghN0s4jQhBso7o68/KGsLnzwlWux2cnv5QYu=(包括 =