如果我创建一个自定义类来充当整数数组的包装器,我就可以让它工作,但我不想做这个额外的步骤。我只想传入一个整数数组。
这是我最近的尝试:
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]
不是正确的选择。但必须有某种我缺少的方法来做到这一点。这似乎是一个微不足道的问题,我很沮丧,因为我还没有找到解决方案。任何帮助将不胜感激。
用于反序列化 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[]>();
}