我有一个强密码,我将它放在我的web.config上有一些麻烦:
所以我的web.config条目是:
<add name="MyConnectionString" connectionString="Data Source=tcp:xxxxxx.database.windows.net,1433;Initial Catalog=MyDatabase;MultipleActiveResultSets=true;User ID=xxxxxx@xxxxxxxx;Password=MyPassword" providerName="System.Data.SqlClient" />
我的强密码是:
&LT =#} U} 2 {P ^ 07&GT; 7u10)'* G7 | 5 = 96; a1F2 =“=!} 7;!65 \ 3 {9P0w(#/] $ {06 | S / L2 = 1 {0 [2E32 + 78AJ | @; 9} $ N = |(0s9,= \ N | O +吨
所以问题与某些需要转义的角色有关,但我试图用单引号来逃避它。
由于
答案 0 :(得分:2)
允许系统为您处理:
Console.WriteLine(
new XElement("add",
new XAttribute("name","MyConnectionString"),
new XAttribute("connectionString",
new SqlConnectionStringBuilder {
DataSource="tcp:xxxxxx.database.windows.net,1433",
InitialCatalog="MyDatabase",
MultipleActiveResultSets=true,
UserID="xxxxxx@xxxxxxxx",
Password=Console.ReadLine()
}
),
new XAttribute("providerName","System.Data.SqlClient")
)
);
答案 1 :(得分:1)
我试图用单引号
来逃避它
这实际上并没有逃脱任何事情 - 它只是允许你将双引号作为价值的一部分。但是这意味着你不能将撇号作为你价值的一部分...将两者转变为实体表示可能更简单......以及{{1} }和<
。
所以在这种情况下你想要:
&
如果您的原始密码中包含<=#}U}2{p^07>7u10)'*g7|5=96!;a1F2="=!,}7;65\3{9P0w(#/]${06|S /L2=l{0[2E32+78AJ|@;9}$N=|(0s9,=\N|o+t
,则必须将其转换为&
。
或者为了更简单,当您生成密码时,强制它不有任何需要转义的字符。 (或者转移到不同的身份验证模型,当然......)
或者按照PetSerAl的答案以编程方式提出这个问题。
答案 2 :(得分:1)
同意@PetSerAl您应该使用高级API为您创建XML。但是,如果您必须手动格式化XML文本,SecurityElement
类可以使用实用程序来转义和取消XML文本:
string password = @"<=#}U}2{p^07>7u10)'*g7|5=96!;a1F2=""=!,}7;65\3{9P0w(#/]${06|S /L2=l{0[2E32+78AJ|@;9}$N=|(0s9,=\N|o+t";
var xmlText = System.Security.SecurityElement.Escape(password); // Escape invalid XML characrers.
var passwordBack = new System.Security.SecurityElement("tag", xmlText).Text; // Unescape them again.
Debug.Assert(passwordBack == password); // No assert