Я пытаюсь проанализировать строку подключения и извлечь значения для использования в коде. Проблема в том, что одно из значений в моей строке подключений имеет символ =.

Вот код, который у меня есть

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=

Да, есть вопрос о строках подключения. Однако ответы по-прежнему не позволяют решить проблему со знаком =.

Например, в этом комментарии конкретно говорится об этом.

SqlConnectionStringBuilder у меня не работает. Если я передаю свой connectionString, он жалуется, что URL-адрес ключевого слова недействителен.

2
Kanini 9 Мар 2019 в 09:37

1 ответ

Лучший ответ

Вам необходимо указать, сколько разделенных строк будет возвращено функцией Split, а в вашем случае - 2.

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

Так что это даст вам,

  • Первая разделенная строка по индексу 0: _authcode
  • Вторая разделенная строка с индексом 1: mQLw/OWghN0s4jQhBso7o68/KGsLnzwlWux2cnv5QYu= (включая =)
4
er-sho 9 Мар 2019 в 07:06