【问题标题】:Posting array to WebApi action method将数组发布到 WebApi 操作方法
【发布时间】:2015-08-20 17:25:33
【问题描述】:

我正在为客户端应用程序开发 WebApi 端点。 API 有一个带有以下签名的方法:

public async Task<IHttpActionResult> Post([FromBody] int[] employeeIds)

我用来触发此端点的示例 POST 请求:

Authorization: Bearer [token]
Host: localhost:44301
Content-Length: 16
Content-Type: application/json

[10,20,30,40,50]

这一切都很好而且花花公子。问题是客户端应用程序只能发送 key/value 对。从示例 POST 请求中可以看出,我只发送数组的值。

我能想到的唯一解决方案是将数组定义为属性的模型,但这会在我的代码库中添加一个新类,除了作为容器之外没有其他用途。

我该如何克服这个问题?


编辑

我正在寻找一种允许客户端将数组作为键/值对的值组件发送的解决方案:

key = [10, 20, 30, 40, 50]

如何将我的方法转变为接受这样的请求?

【问题讨论】:

  • 有问题的“客户请求”会是什么样子?

标签: c# asp.net asp.net-web-api


【解决方案1】:

你可以像这样使用字典:

public async Task<IHttpActionResult> Post([FromBody] Dictionary<string, int> employeeIds)

然后你可以发送如下请求

Authorization: Bearer [token]
Host: localhost:44301
Content-Length: 16
Content-Type: application/json

{
    'first': 10,
    'second': 20,
    'third': 30
}

****编辑****

响应您对我的回答的更新和评论,每个数字数组都有一个键。 您可以像这样使用 .Net 类型 Tuple

public async Task<IHttpActionResult> Post([FromBody] Tuple<string, int[]> employeeIds)

然后您可以使用代码访问值

string myKey = employeeIds.Item1;
int[] theIds = employeeIds.Item2;

请求如下所示:

Authorization: Bearer [token]
Host: localhost:44301
Content-Length: 16
Content-Type: application/json

{
   Item1: 'OfficeWorkers',
   Item2: [10, 20, 30, 40, 50]
}

但是,这显然不那么具有声明性,并且元组对于将来使用 api/修改您的代码的其他人来说不太明显。

如果由我决定,我更喜欢一个小类(仅存在于 API 层中),它充当一个简单的模型,保存从 API 调用接收到的数据 - 然后在 WebApi 代码中 - 将其映射到您在内部使用的“正确”类。

【讨论】:

  • 也许我应该更具体一些。我正在寻找的是 key = [10,20,30,40,50]。值为数组。
  • 啊,好吧,我的印象是每个值都有键!编辑即将推出.....
【解决方案2】:

Web API 支持以多种方式解析内容数据,但它不处理多个发布的内容值。您的问题的解决方案可能是创建一个具有 int[] 类型属性的 ViewModel。

您可以在此处阅读有关此问题的更多信息: Passing array of integers to webapi Method

Posting array of integers to asp.net web api

简而言之,您需要创建具有 int[] 属性的 ViewModel

【讨论】:

    【解决方案3】:

    如果我认为您的问题是正确的,这是我的示例代码:

    public string Post([FromBody]Dictionary<string, int[]> value)
    {
          return "OK";
    }
    

    邮递员客户:

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-19
      • 2013-03-16
      • 2014-07-23
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多