Как удалить символ

#c#

#c#

Вопрос:

Я должен установить строку подключения в Web.config с моего контроллера mvc. Я уже написал код, подобный приведенному ниже, и он может успешно редактировать строку подключения в Web.config, но проблема в том, что он добавляет дополнительные символы при сохранении в Web.config. Это дополнительные символы, amp;amp; которые я не указал в string foo переменной. Тогда мой вопрос в том, почему это добавляется автоматически при сохранении в Web.config? Как я могу пропустить эти символы при сохранении? Есть идеи?

С контроллера MVC я установил строку подключения в foo переменную, как показано ниже:

 string foo = @"metadata=res://*/edmxFileFactory.csdl|res://*/edmxFileFactory.ssdl|res://*/edmxFileFactory.msl;provider=System.Data.SqlClient;provider connection string=amp;quot;Data Source=10.110.1.77MASK,59931;Initial Catalog=FileFactory;User ID=connectWeb;Password=conn123$;MultipleActiveResultSets=True;App=EntityFrameworkamp;quot;";
                var configuration = WebConfigurationManager.OpenWebConfiguration("~");
                var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
                section.ConnectionStrings["FileFactoryEntities"].ConnectionString = foo;
                configuration.Save();
  

В Web.config это сохраняется следующим образом-

 <connectionStrings>
    <add name="FileFactoryEntities" connectionString="metadata=res://*/edmxFileFactory.csdl|res://*/edmxFileFactory.ssdl|res://*/edmxFileFactory.msl;provider=System.Data.SqlClient;provider connection string=amp;amp;quot;Data Source=10.110.1.77MASK,59931;Initial Catalog=FileFactory;User ID=connectWeb;Password=conn123$;MultipleActiveResultSets=True;App=EntityFrameworkamp;amp;quot;"
      providerName="System.Data.EntityClient" />
  </connectionStrings>
  

Комментарии:

1. Откуда foo берется? Можете ли вы заменить amp;quot; в нем на " ? Это приведет к amp;quot; записи на ваш web.config .

2. Оригинальный вариант просто написан на c # внутри контроллера. Как вы можете видеть, я сохранил в переменной foo

3. amp;amp; на самом деле это amp; of amp;quot; , который анализируется.

4. Вы можете видеть, что я вообще не передаю amp;amp; . Внимательно смотрите в foo переменной

5. Тогда я бы изменил его, foo содержит экранированный XML ( amp;quot; вместо " ). Это буквально то, что вы хотите записать в свой файл, но механизм, с помощью которого это записывается, выполняет экранирование за вас. Таким образом, он экранируется дважды. Следовательно, amp;amp;quot; , поскольку amp; выполняется экранирование.

Ответ №1:

В комментариях указано решение; однако, похоже, вы неправильно поняли суть.

TL; DR: решение в одной строке:

Замените каждое amp;quot; вхождение на "" в дословной строке C # foo .

Объяснение:

В атрибуте XML кавычки должны быть экранированы, иначе их можно перепутать с кавычками самого атрибута. Следовательно, когда вы сохраняете атрибут в XML, содержащий кавычки, они будут экранированы amp;quot; сущностью.

Теперь вы скопировали сохраненный XML-атрибут, не экранируя сущности (т.Е. вы изменили значение connection string="..." на connection string=amp;quot;...amp;quot; ). Когда такое значение собирается быть сохранено снова, средство записи XML не увидит никаких кавычек для экранирования, но теперь видит амперсанды, которые также должны экранироваться, потому что обычно в XML амперсанд является первым символом экранируемого объекта. Поэтому amp; теперь заменяется на amp;amp; .

В строках C # символы, заключенные в кавычки, также должны быть экранированы. Для обычных строк вы должны использовать " для кавычек, а в дословных строках вы должны удвоить кавычки. Итак, просто замените каждую amp;quot; на "" в вашей foo переменной C #, и все в порядке.

Комментарии:

1. Работает! Спасибо, чувак. Просто заменено amp;quot; на ""