保存字符串时如何删除字符

时间:2019-03-07 15:05:47

标签: c#

我必须从我的mvc控制器在Web.config中设置连接字符串。我已经写过类似波纹管的代码,它可以成功编辑Web.config中的连接字符串,但是问题是,当它保存在Web.config中时,它将添加额外的字符。 &变量中没有提供额外的字符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="Data Source=10.110.1.77\MASK,59931;Initial Catalog=FileFactory;User ID=connectWeb;Password=conn123$;MultipleActiveResultSets=True;App=EntityFramework"";
                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;quot;Data Source=10.110.1.77\MASK,59931;Initial Catalog=FileFactory;User ID=connectWeb;Password=conn123$;MultipleActiveResultSets=True;App=EntityFramework&amp;quot;"
      providerName="System.Data.EntityClient" />
  </connectionStrings>

1 个答案:

答案 0 :(得分:2)

评论告诉您解决方案;但是,似乎您误解了这一点。

TL; DR:一行解决方案:

用C#逐字字符串&quot;中的每个""替换为foo

说明:

在XML属性中,必须对引号进行转义,否则它们可能会被属性本身的引号引起混淆。因此,当您在包含引号的XML中保存属性时,&quot;实体会将其转义。

现在,您在不取消转义实体的情况下复制粘贴了保存的XML属性(即,将connection string="..."的值更改为connection string=&quot;...&quot;)。当将再次保存该值时,XML编写器将看不到任何要转义的引号,但现在会看到&符号,也必须对其进行转义,因为通常在XML&符中是转义的实体的第一个字符。因此,&现在被&amp;取代。

在C#字符串中,引号字符也必须转义。对于常规字符串,应使用\"作为引号,而在逐字字符串中,必须将双引号引起来。因此,只需将&quot; C#变量中的每个""替换为foo,就可以了。