ASP.NET Core 3.1-IIS服务器上的字符串后面带有重音符的代码

问题描述

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

当我在VS2019或本地IIS中运行代码时,一切正常,该字符串显示并以sql形式使用“é”和“ô”等字符注入。但是,一旦我们在开发IIS上迁移了代码,则重音字符将更改为应识别重音字符的无法识别的字符“ ...”。对于这三种情况,我使用相同的数据库

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代码本身上。注意:此类位于认项目引用的另一个projet / 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élede dploiement:...”。但是,如果从Visual Studio或我的本地IIS(发布发布)运行了相同的代码/内部版本,则该条目将按预期显示为“Rôlededéploiement:...”。

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

谢谢!

编辑:添加了更多信息

EDIT2:我已经能够在本地IIS上重现该问题。 我们正在使用Azure DevOps在IIS服务器上构建和发布Webapp。我已经下载了Azure Build(假设我与使用VS2019获得的本地语言相同),现在遇到了问题。看来这是由使用Azure DevOps构建时发现的某些东西引起的。

解决方法

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

我更改了:

vmImage: 'ubuntu-latest'

收件人:

vmImage: 'windows-2019'

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