簡體   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