【问题标题】:Prevent Percent Character Transform防止百分比字符变换
【发布时间】:2011-06-28 15:30:15
【问题描述】:

我正在尝试将 Web 部署工具包与我们的 MVC3 项目一起使用,总体而言,部署工作正常,但我们到数据库的连接字符串的密码包含一个百分号 (%) 字符,后跟两个数字。部署工具包似乎将其转换为十六进制字符替换。有没有办法防止这种字符替换并仍然保持连接字符串在开发人员机器上可用?我尝试在 Web.Debug.Config 文件中放入替换,甚至添加 %25 而不仅仅是 % 以尝试让它仅替换 % 字符,它仍然替换完整的值。

例子:

<connectionStrings>
    <add name="MyDB" connectionString="server=Server1;uid=user1;pwd=abc123%72;database=Database1;"
</connectionStrings>

被替换为

<connectionStrings>
    <add name="MyDB" connectionString="server=Server1;uid=user1;pwd=abc123r;database=Database1;"
</connectionStrings>

【问题讨论】:

  • 尝试使用 %% 转义百分号?
  • @Jacob - 这样就更接近了。我输入“pwd=abc123%%72”并在转换后得到“pwd=abc123%r”。
  • 这个怎么样:pwd=abc123%%372
  • @Jacob - 还是不行,现在它输出 pwd=abc123r
  • serverfault.com/questions/212687/… 好像也有同样的问题,但是没有答案

标签: asp.net asp.net-mvc-3 msdeploy webdeploy


【解决方案1】:

将连接字符串的密码部分设置为:

pwd=abc123%252572

经过多次尝试和错误,我发现它确实是双重通过。第一遍将 %2525 转换为 %25,第二遍将 %25 转换为 %。这就是为什么当您使用 %2572 时,它会生成 r(%72 是 r 的 Unicode 代码)。在我看来,这似乎是解析器中的一个错误。或许知识渊博的人可以给出更好的解释。

【讨论】:

  • 这个解决方案非常适合我。我不知道这是一个错误还是只是解析器的未记录操作,但如果有人有更好的解释,我也会对此感兴趣。感谢您最终提出解决问题的方法。我已经通过使用Parameters.xml文件并将连接字符串作为参数“解决”了这个问题,但我更愿意使用基于构建类型(调试/发布)指定的内置web/app.config功能/生产/测试等)。
  • 不客气。我想知道这是否可以发布在 MS 网站上的某个地方以引起更多关注。很高兴我能够回答,即使为时已晚。
  • @mateuscb :这是几年前的报道。 see here 并且错误仍然存​​在。将 % 替换为 %25 一次对我有帮助。
  • @Peter 如果您仅使用%25 就能够使其工作,那么问题似乎已经得到解决。当我遇到这个问题时,我们不得不使用%2525
【解决方案2】:

我遇到了完全相同的问题(当然密码不同)。

为了让数据库的连接字符串在开发人员机器上正常工作,我修改了发布设置以使用“不同”连接字符串。

对于您的示例: web.config 将包含:

<connectionStrings>
<add name="MyDB" connectionString="server=Server1;uid=user1;pwd=abc123%72;database=Database1;"
</connectionStrings>

在发布设置下右键项目,选择发布...,进入设置->数据库。对于数据库 MyDB,输入

 server=Server1;uid=user1;pwd=abc123%72;database=Database1;

这允许我的开发机器保留它与数据库的连接,并且主机可以通过直接发布或通过 teamcity 自动使用正确的连接字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    相关资源
    最近更新 更多