【问题标题】:C# Azure Function .NET Core 3 string Encoding IssueC# Azure Function .NET Core 3 字符串编码问题
【发布时间】:2021-05-02 12:58:35
【问题描述】:

我有一个 azure 函数,即 .net core 3(支持最新版本),它在创建或更新联系人时从 Microsoft Dynamics 365(通用数据服务)接收 JSON。我没有对数据进行任何转换,只是获取 JSON 并将其放入服务总线队列中。问题在于国际字符。例子。名字在 Dynamics 中的数据是

何塞

但是,一旦它到达 Azure Function,它就会变成

何塞

我在读取其中包含的 HTTP 请求正文时删除了我正在执行的任何 UTF-8 编码,但这并没有解决问题。我已经尝试了几件事,甚至在我尝试读取数据之前都无法弄清楚数据发生了什么。

这是我尝试过的。我需要读取 Dynamics 中的数据并将其转换为 UTF-8,因为我发送数据的系统也使用 UTF-8。

原文:

string requestBody = await CommonFactory.StreamReader(req.Body).ReadToEndAsync();

我尝试了以下方法:

        string requestBody = await req.Content.ReadAsStringAsync();

        dynamic data = await req.Content.ReadAsAsync<object>();

我还尝试查看发送的标头,并且内容类型不包括字符集值。刚刚有

应用程序/json

我希望其他人遇到过使用 .NET 核心进行字符串编码的问题,并能帮助我指明正确的方向。现在,我正在尝试切换到内存流,看看是否有帮助。

【问题讨论】:

  • 您检查过服务总线中的消息吗? azure.microsoft.com/en-us/updates/sesrvice-bus-explorer
  • 这是在消息到达服务总线之前。当 Dynamics 365 将消息发布到将消息放入服务总线的端点时,就会发生这种情况。当我尝试读取正文数据时会发生这种情况。
  • 我正在测试让 Dynamics 将消息直接放在服务总线中,看看那里会发生什么。
  • 您能打印出您的 HTTP 触发器函数接收到的标头吗?可能是调用者指定编码。 é 是有效的 UTF-8 字符 (\x130)。当您将正文打印为byte[] 而不是string 时会发生什么?将正文读作byte[] 并打印为十六进制以查看它究竟包含什么。同时打印身体的长度/大小。

标签: c# .net-core character-encoding azure-functions


【解决方案1】:

经过一些更深入的测试,我认为Function框架中有些东西。我从在插件注册工具中使用 Webhook 转移到了服务端点。

【讨论】:

    猜你喜欢
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多