ServiceStack:将数组传递给服务

Cal*_*ass 4 servicestack

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

这是我的请求对象:

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

以下是提出的请求:

http://localhost:9090/json/reply/DashboardRequest?EquipmentIds=1&EquipmentIds=2
Run Code Online (Sandbox Code Playgroud)

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

public object Get(DashboardRequest request)
{
    // request.EquipmentIds.Length == 1;
    // request.EquipmentIds[0] == 1;
}
Run Code Online (Sandbox Code Playgroud)

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

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

myt*_*thz 5

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

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

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

http://localhost:9090/dashboard?EquipmentIds=1&EquipmentIds=2
Run Code Online (Sandbox Code Playgroud)

这种支持还增加了对预定义的路线此承诺,将可从v4.0.24 +这就是现在可在MyGet.

所以你现有的请求现在也可以,例如:

http://localhost:9090/json/reply/DashboardRequest?EquipmentIds=1&EquipmentIds=2
Run Code Online (Sandbox Code Playgroud)