ServiceStack:将数组传递给服务

时间:2014-07-16 09:47:34

标签: servicestack

当我将数组传递给我的服务时,我遇到了问题,它只能识别数组中的第一个值:

这是我的请求对象:

[Route("/dashboard", "GET")]
public class DashboardRequest : IReturn<Dashboard>
{
    public int[] EquipmentIds { get; set; }
}

以下是提出的请求:

http://localhost:9090/json/reply/DashboardRequest?EquipmentIds=1&EquipmentIds=2

但是当我在服务中观察数组时,它只包含一个值,即1

public object Get(DashboardRequest request)
{
    // request.EquipmentIds.Length == 1;
    // request.EquipmentIds[0] == 1;
}

我做过的一个解决方案是以下,看起来有点hacky?我认为在我的Request Object中指定它的意思是我得到一个强类型的Request Object?

var equipmentIds = Request
                       .QueryString["EquipmentIds"]
                       .Split(',')
                       .Select(int.Parse)
                       .ToList();

2 个答案:

答案 0 :(得分:5)

这在您使用自定义路线时有效,例如:

[Route("/dashboard", "GET")]
public class DashboardRequest : IReturn<Dashboard>
{
    public int[] EquipmentIds { get; set; }
}

并通过用户定义的路线调用它,例如:

http://localhost:9090/dashboard?EquipmentIds=1&EquipmentIds=2

Predefined Routes中的this commit也添加了对此的支持,现在可以从 v4.0.24 + available on MyGet获取。

因此,您现有的请求现在也可以使用,例如:

http://localhost:9090/json/reply/DashboardRequest?EquipmentIds=1&EquipmentIds=2

答案 1 :(得分:1)

将请求对象绑定到int数组,如

[Route("/dashboard/{EquipmentIds}", "GET")]
public class DashboardRequest : IReturn<Dashboard>
{
    public int[] EquipmentIds { get; set; }
}

 http://localhost:9090/dashboard/1,2