Разбор строки подключения с символом = - PullRequest
2 голосов
/ 09 марта 2019

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

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

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");
        }
    }
}

Проблема в том, что этот код работает во всех случаях, кроме случаев, когда в коде авторизации есть =.

Таким образом, эта строка подключения не дает правильных данных.

<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-адрес ключевого слова не vaid.

1 Ответ

3 голосов
/ 09 марта 2019

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

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

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

  • Первая разделенная строка в индексе 0: _authcode
  • Вторая разделенная строка в индексе 1: mQLw/OWghN0s4jQhBso7o68/KGsLnzwlWux2cnv5QYu= (включая =)
...