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

Mik*_*ebb 58 .net c# asp.net asp.net-mvc configuration

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

我们在代码中模拟了一个Windows NT服务帐户,以便将文档读/写到文件共享.用户ID在代码中编译,服务帐户密码存储在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
    );
Run Code Online (Sandbox Code Playgroud)

为什么会导致网站中断?

Rui*_*mba 111

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

代替

my&password 
Run Code Online (Sandbox Code Playgroud)

尝试

my&password
Run Code Online (Sandbox Code Playgroud)

您可以使用FreeFormatter.com等网站来转义/取消XML字符串.

  • 每个人如何使用它的URL小心!带"&"的网址 不是带"&"的网址.在将其应用于您的URL地址之前,请不要忘记将其替换为代码.在找到原因之前,我陷入了这个陷阱并且整天处理了一个错误. (2认同)

Kel*_*sey 43

您需要将编码值放在web.config中.一旦拉动它就会正确读出它,但在配置文件中它需要进行编码.

例如:

密码:( your&password 你期望的)

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

读取值的包装器方法应自动取消编码your&password.

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

< = &lt;
> = &gt;
" = &quot;
' = &apos;
& = &amp;
Run Code Online (Sandbox Code Playgroud)