我必须从我的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=&quot;Data Source=10.110.1.77\MASK,59931;Initial Catalog=FileFactory;User ID=connectWeb;Password=conn123$;MultipleActiveResultSets=True;App=EntityFramework&quot;"
providerName="System.Data.EntityClient" />
</connectionStrings>
答案 0 :(得分:2)
评论告诉您解决方案;但是,似乎您误解了这一点。
TL; DR:一行解决方案:
用C#逐字字符串"
中的每个""
替换为foo
。
说明:
在XML属性中,必须对引号进行转义,否则它们可能会被属性本身的引号引起混淆。因此,当您在包含引号的XML中保存属性时,"
实体会将其转义。
现在,您在不取消转义实体的情况下复制粘贴了保存的XML属性(即,将connection string="..."
的值更改为connection string="..."
)。当将再次保存该值时,XML编写器将看不到任何要转义的引号,但现在会看到&符号,也必须对其进行转义,因为通常在XML&符中是转义的实体的第一个字符。因此,&
现在被&
取代。
在C#字符串中,引号字符也必须转义。对于常规字符串,应使用\"
作为引号,而在逐字字符串中,必须将双引号引起来。因此,只需将"
C#变量中的每个""
替换为foo
,就可以了。