繁体   English   中英

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

[英]ASP.NET Core 3.1 - Code behind string with accent character issue on IIS server

我在 .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();
}

单击按钮时,新值来自 razor 页面,带有某个值的字符串被发布。 该按钮是表单内表格的一部分,使用 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 服务器上构建和发布 web 应用程序。 我已经下载了 Azure Build(我认为它与我使用 VS2019 在本地获得的相同),现在我遇到了问题。 所以它似乎是由使用 Azure DevOps 构建时发现的东西引起的......

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

我变了:

vmImage: 'ubuntu-latest'

到:

vmImage: 'windows-2019'

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM