如何将 int 数组作为主体参数传递到 HTTP 触发的、点网隔离的 V4 Azure 函数中?

问题描述 投票:0回答:1

如果我创建一个自定义类来充当整数数组的包装器,我就可以让它工作,但我不想做这个额外的步骤。我只想传入一个整数数组。


这是我最近的尝试:

using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;

public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")]
            HttpRequestData req)
        {
            var ids = JsonSerializer.Deserialize<int[]>(req.Body);
            ...
        }

我正在使用 Postman 进行本地测试。我将正文设置为 JSON,我的输入如下所示:

{
    "ids": [1, 2, 3]
}

我收到一个 JSON 序列化错误,显然,b/c 它期望一个只有一个数组的对象,因为它是唯一的字段,名为“ids”。但这不是我想要解决这个问题的方式。

之前,我尝试过这个(基于Mircosoft自己的文档):

using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using FromBodyAttribute = Microsoft.Azure.Functions.Worker.Http.FromBodyAttribute;

public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")]
            HttpRequestData req, [FromBody] int[] ids)
        {
             ....
        }

当我通过 Postman 使用上面的 JSON Body 输入方法时,我收到相同的序列化错误。

当我尝试将其作为原始文本传递时,如

[1, 2, 3]
,我收到 System.InvalidOperationException 并显示以下消息:
'System.Int32[]' is not supported by the 'DefaultFromBodyConversionFeature'

显然基于最后一个例外,似乎

[FromBody]
不是正确的选择。但必须有某种我缺少的方法来做到这一点。这似乎是一个微不足道的问题,我很沮丧,因为我还没有找到解决方案。任何帮助将不胜感激。

c# azure-functions httprequest azure-functions-isolated
1个回答
0
投票

用于反序列化 JSON 的代码期望在请求正文中接收 int 数组。但是,从 Postman 调用时您正在传递一个对象。尝试在 Postman 中发送以下有效负载:

[
    1,
    2,
    3
]

然后您的 Azure Function 可以反序列化请求正文:

public async Task<HttpResponseData> RunAsync([HttpTrigger(AuthorizationLevel.Anonymous, "post")]
            HttpRequestData req, [FromBody] int[] ids)
{
    var ids = req.ReadFromJsonAsync<int[]>();      
}
© www.soinside.com 2019 - 2024. All rights reserved.