SAP Customer Data Cloud Positions

.NET SDK Change Log

Skip to end of metadata
Go to start of metadata


Version 2.16.5 - 16 Apr 2020

  • Update - The validateUserSignature method now includes an overload that accepts expiration: number.

Version 2.16.4 - 04 Feb 2020

  • Update - Added JWT signature validation. See the SigUtils.ValidateSignature method.
  • Update - The SDK is now strong-named with the same public key as version 2.15.4.

Version 2.16.1 - 22 Dec 2017

  • Update - Added GSAuthRequest class for handling requests signed with a JWT authorization header.

Version 2.15.7 - 16 Aug 2017

  • Removed Expect:100Continue header from requests
  • Added getDynamicSessionSignatureUserSigned to SigUtils to enable generation of Dynamic Session Expiration cookies using an application key and secret pair, instead of the partner secret.

Version 2.15.6 - 08 Jan 2014

  • Minor bug fixes

Version 2.15.5 - 10 Nov 2013

  • Minor bug fixes


Version 2.15.4 - 09 Sep 2013

  • userKey - A new optional parameter in GSRequest constructor. A key of an admin user with extra permissions.
  • Bug fixes.


Version 2.15.3 - 06 Nov 2012

  • GSRequest.APIDomain - new public property that provides the option to specify a data center to be used for making API calls. For example: "" for Europe data center. 
  • The SDK is now Strong Named. This means that the SDK's DLL is signed and you may verify its authenticity using the following Public Key: 
    You may run the DLL with elevated permissions, and put it in your Global Assembly Cache (GAC).
  • When all connections are in use and a new request is sent, the SDK now blocks the calling thread until a connection frees up instead of letting .Net queue the request (which can blow up memory and increase response latencies). You may control this behavior using the new static public properties:
    • GSRequest.BlockWhenConnectionsExhausted - determines whether to block your thread when you attempt to send a new request while all connections are in use (default is true).
    • GSRequest.EnableConnectionPooling - This flag tells the SDK to try and reuse connections to the gigya servers, in order to lower the overheads associated with creating new connections, and to reduce latency (default is true).
    • GSRequest.MaxConcurrentConnections - The maximum number of concurrent connections that can remain open to the Gigya servers, assuming EnableConnectionPooling flag (see above) was enabled (default is 100).
  • GSResponse.Get - new method that provides the option to use paths instead of simple keys to extract values from a response, e.g. "users[0].identities[0].provider".

Version 2.15.1 - 21 June 2012

  • Providing improved error details when a client side error is detected in the SDKs.
  • When sending a request to the Gigya API, if the SDK detects that the client and server clocks are out of sync, it will automatically adjust the timestamp on outgoing requests to match the server clock. 
  • If a request parameter is given a null value, the SDK will now serialize it in the query string as an empty string instead of as the literal "null".


Version 2.15 - 10 Apr 2012


Version 2.14 - 17 Oct 2011

Enabled GZIP compression.


Version 2.13.4 - 17 Aug 2011

Note: This version is not backwards compatible. You may need to make minor changes in your code, if you are upgrading from a former version. Please follow the migration instruction below. Upgrading to this version is required, if you wish to integrate Gigya'sLoyalty or the Gigya Cloud Storage platform.

  • GSDictionary class is deprecated, and is replaced by the following new classes:
  • GSObject - New class, used for passing parameters, for example when issuing requests or receiving response data.
  • GSArray - New class, used for passing Arrays, for example when issuing requests or receiving response data.
  • All the method names now start with an upper-case letter, so as to conform with .NET coding conventions. For example: getParams() changed to GetParams().

Migration Instruction

Search for all instances of GSDictionary class in your code. Replace each GSDictionary instance with GSObject, and each GSDictionary[] (array) with GSArray.
Then update all method names to start
with an upper-case letter.
For example:

Old Code (using GSDictionary):

// Publish User Action

// Defining the userAction parameter
GSDictionary userAction = new GSDictionary();

userAction.put("title", "This is my title");
userAction.put("userMessage", "This is my user message");
userAction.put("description", "This is my description");
userAction.put("linkBack", "");        

GSDictionary[] mediaItems = new GSDictionary[1];
mediaItems[0] = new GSDictionary("{\"src\":\"\",\"href\":\"\",\"type\":\"image\"}");
userAction.put("mediaItems", mediaItems);

// Sending 'socialize.publishUserAction' request
GSRequest request = new GSRequest("PUT-YOUR-APIKEY-HERE", "PUT-YOUR-SECRET-KEY-HERE","socialize.publishUserAction");
request.setParam("userAction", userAction); // set the "userAction" parameter
request.setParam("uid", "PUT-UID-HERE");  // set the "uid" parameter to user's ID

// Sending 'socialize.publishUserAction' request
GSResponse response = request.send();


New Code (using GSObject and GSArray):

// Publish User Action

// Defining the userAction parameter
GSObject userAction = new GSObject();

userAction.Put("title", "This is my title");
userAction.Put("userMessage", "This is my user message");
userAction.Put("description", "This is my description");
userAction.Put("linkBack", "");

GSArray mediaItems = new GSArray();
mediaItems.Add(new GSObject("{\"src\":\"\",\"href\":\"\",\"type\":\"image\"}"));
userAction.Put("mediaItems", mediaItems);

// Sending 'socialize.publishUserAction' request
GSRequest request = new GSRequest("PUT-YOUR-APIKEY-HERE", "PUT-YOUR-SECRET-KEY-HERE", "socialize.publishUserAction");
request.SetParam("userAction", userAction); // set the "userAction" parameter
request.SetParam("uid", "PUT-UID-HERE");  // set the "uid" parameter to user's ID

// Sending 'socialize.publishUserAction' request
GSResponse response = request.Send(); 


Version 2.13 - 26 June 2011

  • When sending a request, if useHTTPS is set to 'true', the request is not signed and the secret key is passed instead - this saves CPU of calculating signature, since it's secured by HTTPS.