从Azure逻辑应用程序向Azure函数应用程序发送JSON请求有时会导致值格式错误

ifsvaxew  于 2023-10-21  发布在  其他
关注(0)|答案(1)|浏览(132)

我有一个逻辑应用程序,它使用Compose来构建JSON对象:

{
"status": "Completed",
"result": [
  {
    "id": "some_hash_here",
    "distance": 0,
    "value": 240032
  }
]
}

此编写使用“调用Azure函数”块和POST方法将其发送到Azure函数。
Azure函数是用C#编写的,并使用常见的HttpRequest方式来获取该请求。
然而,当该函数由于某种原因获得JSON时,它看起来像这样:

{
"status": "Completed",
"result": [
  {
    "id": "some_hash_here",
    "distance": 0.0,
    "value": 240032.0
  }
]
}

这当然会引起问题。我不明白这种转换是在哪里发生的,Azure逻辑应用程序中的诊断告诉我调用Azure功能块的输入是正确的,但当C#代码得到它时,它已经发生了变化!
在这一点上,也没有进行任何具体化,它实际上是函数在请求中得到的,所以有什么东西改变了这一点?
我试过使用Parse JSON块来强制它进入模式,但这仍然不能阻止更改的发生,实际上可能会导致我的C#抛出对象引用错误!

gopyfrb3

gopyfrb31#

我在我的环境中复制,下面是我的预期结果:

Design:

C# Azure Function code:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string reqBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(reqBody);
    string status = data["status"];
    int distance = data["result"][0]["distance"];
    int value = data["result"][0]["value"];
    log.LogInformation($"Hello Rithwik Bojja !! ,Status: {status}, Distance: {distance}, Value: {value}");
    
    string responseMessage = string.IsNullOrEmpty(status)
        ? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
                : $"Hello Rithwik Bojja !! ,Status: {status}, Distance: {distance}, Value: {value}";

            return new OkObjectResult(responseMessage);
}

Output:

使用上面的代码得到预期的结果,因为我已经得到了。否则我建议你提出支持请求,因为你的行为是不正常的。

相关问题