ServiceStack: Pass an array to a Service

servicestack

Solution

This works when you use the custom route, e.g:

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

and call it via the User Defined route, e.g:

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

Support for this has also been added on Predefined Routes in this commit which will be available from v4.0.24+ that's now available on MyGet.

So your existing request now works as well, e.g:

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

Problem

I'm having an issue when I pass an array to my service, it only recognizes the first value in the array: Here is my request object: ``` [Route("/dashboard", "GET")] public class DashboardRequest : IReturn<Dashboard> { public int[] EquipmentIds { get; set; } } ``` Here is the request which is made: ``` http://localhost:9090/json/reply/DashboardRequest?EquipmentIds=1&EquipmentIds=2 ``` But when I observe the array in my service, it only contains one value, which is `1`. ``` public object Get(DashboardRequest request) { // request.EquipmentIds.Length == 1; // request.EquipmentIds[0] == 1; } ``` One Solution I've done is the following, which seems a bit hacky? I thought the point of specifying it in my Request Object is that I get a strongly typed Request Object? ``` var equipmentIds = Request .QueryString["EquipmentIds"] .Split(',') .Select(int.Parse) .ToList(); ```

Original source