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

标签 c# azure-functions httprequest azure-functions-isolated

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


这是我最近的尝试:

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 自己的 documentation ):

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由“DefaultFromBodyConversionFeature”支持

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

最佳答案

如果你 body 的内容很简单:

[1,2,3]

您可以使用以下方法反序列化它:

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

否则,如果您输入的是:

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

那么如果没有类定义,您就无法反序列化内容:

public class IdsDto
{
   public List<int> ids { get; set; }
}

然后你可以像这样使用:

var idsDto = JsonSerializer.Deserialize<IdsDto>(req.Body);
var ids = idsDto.ids;

如果您真的想要避免中间类,您可以执行一些肮脏的字符串操作,只留下int[]:

var intArrayString = req.Body.substring(req.Body.IndexOf('['), req.Body.IndexOf(']') - req.Body.IndexOf('[') + 1);
// And then:
var intArray = JsonSerializer.Deserialize<List<int>>(intArrayString);

但是,老实说,我会选择中级。

关于c# - 如何将 int 数组作为主体参数传递到 HTTP 触发的、点网隔离的 V4 Azure 函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77062702/

相关文章:

java - TaxCore - 使用智能卡证书请求 token

c# - 如何启动新的 Facebook Web 应用程序

c# - 是否可以对查询参数使用 Web API 模型验证?

firebase - 使用 Firebase OpenID Connect 提供程序作为 Azure Function App 身份提供程序

c# - 进程无法访问该文件,因为它正在被另一个进程在第二次调用时使用

c# - .NET 7 中的 Azure Functions(独立)发布到 Azure,加载了 0 个函数

java - 如何使用 Dumbledroid 访问 JSON 的内部节点?

Android 无法使用 Volley 库访问 URL

c# - 通过字典访问子对象的方法

c# - 从 Sqlite 数据库中读取以二进制形式存储的 Guid