如何从帖子中的 csv 查询参数绑定可枚举列表
Posted
技术标签:
【中文标题】如何从帖子中的 csv 查询参数绑定可枚举列表【英文标题】:How to bind ienumerable list from a csv query param in a Post 【发布时间】:2018-05-15 20:29:21 【问题描述】:我通过 ajax 调用发送一个数组,如下所示:
$.ajax(
url: `$rootUrlapi/groups/EditMemberGroups?groupIds=$userGroupIds`,
type: "POST",
cache: false,
dataType: "json",
processData: false,
contentType: false
);
控制器看起来像这样:
[HttpPost]
public void EditMemberGroups(IEnumerable<int> groupIds)
GroupMemberService.EditMemberGroups(groupIds);
问题是当它到达这个 api 调用时,groupIds
为空。呼叫看起来像这样:http://localhost/api/groups/EditMemberGroups?groupIds=1,2,3
任何见解将不胜感激,谢谢!
【问题讨论】:
【参考方案1】:你需要一个包含列表的类:
public class ListOfGroupIds
public IEnumerable<int> GroupIds get; set;
将您的端点更改为:
public void EditMemberGroups([FromBody] ListOfGroupIds anyNameHere)
将数据作为 JSON 对象发送:
data: 'GroupIds': groupIds
【讨论】:
已经试过了,它给了我同样的结果。groupIds
为空
我更正了端点函数的定义。尝试将[FromBody]
放在参数前面。
您是否更改了 ajax 调用的足迹,因此 ID 不在 url 中,而是在单独的数据属性中? $.ajax( type: "POST", url: '$rootUrlapi/groups/EditMemberGroups', data: 'GroupIds': groupIds );
是的,我做到了。
如果把endpoint里面的参数改成单个字符串,这样发送/api/groups/EditMemberGroups?groupIds=ABC
会收到什么吗?【参考方案2】:
您必须更改代码中的两件事。首先,您必须添加 [FromQuery]
属性以指定此值来自查询而不是帖子正文。
public void EditMemberGroups([FromQuery]IEnumerable<int> groupIds)
第二个变化是 API 调用本身。您必须像这样发送数据:
http://localhost/api/groups/EditMemberGroups?groupIds=1&groupIds=2&groupIds=3
【讨论】:
以上是关于如何从帖子中的 csv 查询参数绑定可枚举列表的主要内容,如果未能解决你的问题,请参考以下文章