如何从帖子中的 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&amp;groupIds=2&amp;groupIds=3

【讨论】:

以上是关于如何从帖子中的 csv 查询参数绑定可枚举列表的主要内容,如果未能解决你的问题,请参考以下文章

oracle EBS中的绑定参数

JPA 中的传递列表命名本机查询

将列表绑定到 Pandas read_sql_query 中的参数与其他参数

如何从邮递员查询参数c#发送值列表

来自List的Xamarin绑定,c#中的查询列表

未绑定命名参数:Spring Boot 中的 DATE_FORMAT 本机查询