我想将一组ID传递给控制器。最初我在查询字符串中添加了每个ID,如下所示:
http://localhost:4000/customers/active?customerId=1&customerId=2&customerId=3
然后在控制器端我有一个接受这个数组的方法:
GetCustomers([FromQuery] int[] ids)
{
...
}
这样运行良好但是在某些情况下,数组中有如此多customerIds
的查询字符串变得太长,所以我不得不修改查询传递给它的方式:< / p>
http://localhost:4000/customers/active?customerIds=1,2,3
我通过更改GetCustomers
参数来接受字符串而不是int数组,然后在控制器中解析customerIds
(使用.Split(',')
)
我觉得直接传递数组更简洁,而不必修改服务器端的字符串。考虑到customerIds
现在被传递的方式,有没有办法实现这一目标?
答案 0 :(得分:1)
1。使用POST
2。使用AJAX&amp;发送数据为JSON
$.ajax({
type: "POST",
url: "/Home/GetCustomers",
data : { stringOfCustomerIds : JSON.stringify(arrCustomerIds)},
dataType: "json",
success: function (response) {
//do something with the response
}
&安培;在控制器方面
public JsonResult GetCustomers(string stringOfCustomerIds )
{
JObject CustomerIdsJson = JObject.Parse(listOfCustomerIds );
foreach (JProperty property in CustomerIdsJson .Properties())
{
Console.WriteLine(property.ID+ " - " + property.Value);
}
return Json(output, JsonRequestBehavior.AllowGet);
}
答案 1 :(得分:1)
基于对[FromQuery]
属性的使用,我可以确定您正在使用.NET Core(仅适用于此)。 [FromQuery]
无法知道要映射到参数的查询字符串的哪一部分,因此必须提供一个Name
参数,如下所示:
[FromQuery(Name ="ids")]
Name
参数可以具有您想要的任何值。只要您的查询与您选择的名称匹配即可。因此,对于上面的示例:
?ids=2&ids=3&ids=4
,但是如果要像
[FromQuery(Name = "kittens")]
,则需要使查询看起来像
?kittens=2&kittens=3&kittens=4
按照这种方法,您将可以看到您的参数已正确填充。
答案 2 :(得分:0)
您可以使用前端的POST请求和后端控制器上的conda create -n renv -c r r=3.4.1
标记将ID作为JSON对象传递到邮件正文中。这样您的网址就会如下所示:[FromBody]
无论邮件正文中有多少个ID。它还为您节省了将每个参数提取并推送到新数组元素的麻烦。