“&”字符会破坏存储在web.config中的密码

我有IIS 7.5上运行的ASP.NET MVC3 C#.NET应用程序。

我们有一个Windows NT服务帐户,我们模拟在我们的代码为了读/写文件到文件共享。 用户标识编译在代码中,服务帐户密码存储在web.config文件中。

密码包含一个&字符(即: p&ssword )。

这打破了网站。 访问网站时,我们收到了这个错误:“对不起,处理您的请求时发生错误”。

以下是使用密码的代码:

  var password = ConfigurationManager.AppSettings.Get(Common.SVC_PWD); bool isSuccess = LogonUser( @"my_svc_acct", "my.domain.net", password, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref token ); 

为什么这会导致网站中断?

我怀疑你没有在web.config文件中正确地编码密码。 请记住, web.config是一个XML文件,所以实体必须进行编码。

代替

 my&password 

尝试

 my&password 

您可以使用诸如FreeFormatter.com之类的网站来转义/ unescape XMLstring。

您将需要将编码值放在web.config中。 一旦你把它拉出来,它会正确地读出来,但在configuration文件本身,它需要进行编码。

例如:

密码: your&password (您所期望的)

编码版本: your&password (应存储在您的web.config中)

读出该值的包装方法应自动将其解码为your&password

您需要为所有“特殊”字符执行此操作:

 < = &lt; > = &gt; " = &quot; ' = &apos; & = &amp; 

使用CDATA将密码存储在web.config中

用这个replace密码

 <![CDATA[MyPassw&rd]]>