我正在为客户端应用程序开发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]
这一切都很好,花花公子。问题是客户端应用程序只能发送键/值对。正如您从示例POST请求中看到的那样,我只发送数组的值。
我能想到的唯一解决方案是使用数组作为属性来定义模型,但这会为我的代码库添加一个新类,除了作为容器之外没有其他目的。
我如何克服这个问题?
我正在寻找一种解决方案,允许客户端将数组作为键/值对的值组件发送:
key = [10, 20, 30, 40, 50]
如何将我的方法转换为接受此类请求?
答案 0 :(得分: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
}
**** **** EDIT
在回复您对我的回答的更新和评论时,每个数组都有一个键。 您可以像这样使用.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代码中 - 映射到一个你正在内部使用的“适当”课程。
答案 1 :(得分:0)
Web API支持以各种方式解析内容数据,但它不处理多个发布的内容值。您的问题的解决方案可能是创建一个具有int []类型属性的ViewModel。
在这里,您可以阅读有关此问题的更多信息: Passing array of integers to webapi Method
Posting array of integers to asp.net web api
简而言之,您需要创建具有int []
属性的ViewModel答案 2 :(得分:0)