mark
mark

Reputation: 1769

How can I write a ServiceStack endpoint to accept an unnamed array?

I've got the following raw request that I need to write an endpoint for.

POST http://remote.zacharias.me:85/User/FitbitImport/Notification HTTP/1.1
X-Fitbit-Signature: +uzx+89UfHXZvMlRucZU/V8DilQ=
Content-Length: 126
Content-Type: application/json
Host: remote.zacharias.me:85
Connection: Keep-Alive

[{"collectionType":"activities","date":"2014-09-24","ownerId":"2RXBTN","ownerType":"user","subscriptionId":"test-activities"}]

If I use a blank request object I don't have access to any data. I tried adding a parse method (as described here: http://docs.servicestack.net/text-serializers/json-serializer) to de-serialize the data but then I just get a RequestBindingException. I did change the sample from a struct to a class because a struct was throwing object not set to a reference errors.

[Route("/User/FitbitImport/Notification")]
public class FitbitSubscriptionNotificationRequest
{
     //Optional property and parse method.
     public List<FitBitNotificationDTO> Data {get;set;}
     public static FitbitSubscriptionNotificationRequest Parse(string json)
     {
        var data = json.FromJson<List<FitBitNotificationDTO>>();
        return new FitbitSubscriptionNotificationRequest { Data = data };
     }
}

How can I write this endpoint so that I have access to the json array that fitbit is sending me?

Upvotes: 0

Views: 117

Answers (1)

mythz
mythz

Reputation: 143319

In ServiceStack all Request DTO's need to be a uniquely-named non-generic type, which can accept an Array of DTO's by having your Request DTO inherit from List<T>, e.g:

[Route("/User/FitbitImport/Notification")]
public class FitbitSubscriptionNotification : List<FitBitNotification> {}

Upvotes: 1

Related Questions