0

我在 .NET Core 3.1 的剃须刀页面后面的代码中包含重音字符的字符串有一个奇怪的问题。

当我在 VS2019 或本地 IIS 中运行代码时,一切正常,字符串显示并使用“é”和“ô”等字符注入 SQL。但是,一旦我们在开发 IIS 上迁移代码,重音字符就会更改为无法识别的字符“...”,其中重音字符应该是。我在 3 种情况下使用相同的数据库。

cshtml 页面使用的是 UTF-8 编码,但我怀疑它是否重要,因为据我所知,问题出在后面的代码中......

假设我有一些功能 OnPost:

public IActionResult OnPostChangeValue(int objectKey, string newvalue)
{
     someInterface.someFunction($"Rôle de déploiement: {newvalue}");

     return Page();
}

当单击按钮时,新值来自剃刀页面,并发布了具有某些值的字符串。该按钮是表单内的表的一部分,使用 ajax 为数据表构建。

<button type="submit" class="btn btn-danger" formaction="./Page?objectKey=' + row.objectKey + '&newvalue=SomeText&handler=ChangeValue">SomeText</button>

然后在接口实现代码中,我添加了一个记录器来获取 SQL 注入之前的值,以验证问题是与 SQL 还是代码本身有关。注意:此类驻留在默认项目引用的另一个项目/dll 中。

public someFunction(string message)
{
    ILogger.logWarning(message);

    using (IDbConnection connection = new SqlConnection(config.GetConnectionString("someDbString")))
            {
                connection.Execute("dbo.someStoredProcedure @Message", new {Message = message});
            }
}

当代码在开发服务器/IIS 上运行时,条目为“R�le de d�ploiement: ...”。但是,如果从 Visual Studio 或我的本地 IIS(发布)运行相同的代码/构建,则该条目如预期的那样是“Rôle de déploiement: ...”。

我的问题是:我该如何解决这个问题和/或 IIS/Windows 服务器上是否有一个设置可以防止在后面的代码中使用重音字符?

谢谢!

编辑:添加了更多信息

EDIT2:我已经能够在我的本地 IIS 上重现该问题。我们正在使用 Azure DevOps 在我们的 IIS 服务器上构建和发布 webapp。我已经下载了 Azure Build(我认为它与我在本地使用 VS2019 获得的相同),现在我遇到了问题。所以它似乎是由使用 Azure DevOps 构建时发现的东西引起的......

4

1 回答 1

0

问题出在 Azure DevOps 中,管道使用代理来构建版本。

我变了:

vmImage: 'ubuntu-latest'

至:

vmImage: 'windows-2019'

在管道配置中,现在代码按预期编译,字符串中带有重音符号。我可能可以改用“windows-latest”,但现在已经解决了。

于 2020-10-23T18:02:01.600 回答