C# example - UserService1.svc/GetEnabledUsers

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;

namespace GetAllEnabledUsers_Csharp
{
class Program
{
static void Main(string[] args)
{
string CK = "SAML"; // Enter Company key
//string LN = "PS11"; // Enter Login Name
// string PWD = "Replicon123!"; // Enter Password
//string UN = CK + "\\" + LN; // UserName in Basic Authentication Format

Dictionary<string, string> errorMessages = new Dictionary<string, string>(); // Create a Dictionary to hold the Error Message Details
string endpoint = getendpointurl(CK); // Variable to hold the Endpoint e.g. NA3, NA4, NA5, SP1 etc
if (errorMessages.Any())
{
string errorDetails = String.Format("Exception: {0}\r\nDetails: {1}\r\nCorelationID: {3}\r\n",
errorMessages["Exception"],
errorMessages["Details"],
errorMessages["CorelationID"]);
Console.WriteLine(errorDetails); // Write the error details to the Console
Console.ReadKey();
return;
}

var urlGenAllEnabledUsers = endpoint + CK + "/services/UserService1.svc/GetEnabledUsers"; // Construct the Web Service URL to be used

string inputData = "{}"; // Define the Input JSON Object in String representation
var jObject_inputData = Newtonsoft.Json.Linq.JObject.Parse(inputData); // Parse the string to JSON Object
errorMessages = new Dictionary<string, string>();

var response_inputData = TryCallService(urlGenAllEnabledUsers, jObject_inputData, out errorMessages); // Make the HTTP Service Call to get the response

if (!errorMessages.Any()) // Check for any error during the HTTP Service Call
{
foreach (Newtonsoft.Json.Linq.JToken user in response_inputData["d"])
{
string userDetails = string.Format("displayText: {0}\r\nloginName: {1}\r\nslug: {2}\r\nuri: {3}\r\n",
user["displayText"],
user["loginName"],
user["slug"],
user["uri"]);
Console.WriteLine(userDetails); // Write the User Details to the Console
}
Console.ReadKey();
}
else
{
string errorDetails = String.Format("Exception: {0}\r\nDetails: {1}\r\nCorelationID: {2}\r\n",
errorMessages["Exception"],
errorMessages["Details"],
errorMessages["CorelationID"]);
Console.WriteLine(errorDetails); // Write the error details to the Console
Console.ReadKey();
}
}

// Function to get Endpoint
private static string getendpointurl(string companykey)
{
string url_DiscoveryService = "https://global.replicon.com/DiscoveryService1.svc/GetTenantEndpointDetails"; // URL to Get TenantEndpointDetails
string data_DiscoveyService = "{\"tenant\":{\"uri\":null,\"slug\":null,\"companyKey\":null}}"; // String representation for JSON Object for GetTenantEndpointDetails Service Call

var jObject_DiscoveryService = Newtonsoft.Json.Linq.JObject.Parse(data_DiscoveyService); // Parse the string to JSON Object
jObject_DiscoveryService["tenant"]["companyKey"] = companykey; // Update the Company key

Dictionary<string, string> errorMessages = new Dictionary<string, string>(); // Create a Dictionary to hold the Error Message Details
var response_DiscoveryService = TryCallService( url_DiscoveryService, jObject_DiscoveryService, out errorMessages); // Make the Service Call

if (!errorMessages.Any())
return response_DiscoveryService["d"]["applicationRootUrl"].ToString(); // Return the Endpoint
else
return errorMessages["Details"]; // Return details of the error received
}

// Function to make Service Call
private static Newtonsoft.Json.Linq.JObject TryCallService(string URL, Newtonsoft.Json.Linq.JObject input, out Dictionary<string, string> errorMessages)
{
try
{
Newtonsoft.Json.Linq.JObject jObject;

var jsondata = Newtonsoft.Json.JsonConvert.SerializeObject(input);
byte[] byteArray = Encoding.UTF8.GetBytes(jsondata);

// Make the HTTP request
HttpWebRequest servicecall = (HttpWebRequest)WebRequest.Create(URL);
//servicecall.Credentials = new NetworkCredential(UN, pwd);
servicecall.PreAuthenticate = true;
servicecall.Method = "POST";
servicecall.ContentType = "application/json; charset=UTF-8";
servicecall.Headers.Add("Authorization", "Bearer lXluv1eGYEGzMwjpsRL5mgEANTNkYTAyZWM5OWU2NDg2MWFmZWVjZDM3MzAxZjA1NTA");
servicecall.ContentLength = byteArray.Length;
servicecall.ServicePoint.Expect100Continue = false;

using (var requestStream = servicecall.GetRequestStream())
{
requestStream.Write(byteArray, 0, byteArray.Length);
requestStream.Close();
}

using (var response = (HttpWebResponse)servicecall.GetResponse())
using (var receivedetream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(receivedetream))
{
jObject = Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine()); // Convert the response to JSON Object
}
errorMessages = new Dictionary<string, string>();
return jObject;

}
catch (Exception e)
{
if (e.GetType() == typeof(WebException)) // Check if the exception is a Web Exception(returned by the HTTP request)
{
Dictionary<string, string> error = new Dictionary<string, string>(); // Create a Dictionary to hold the Error Details
WebException eWebException = (WebException)e;
Newtonsoft.Json.Linq.JObject errorJObject = GetResponseErrorObject((HttpWebResponse)eWebException.Response, out error); // Get the formatted Error Details

if (!error.Any())
{
errorMessages = new Dictionary<string, string>()
{
{"Exception", e.Message},
{"Details", errorJObject["error"]["reason"].ToString()},
{"CorelationID", eWebException.Response.Headers["X-Execution-Correlation-Id"]}
};
}
else
{
errorMessages = error;
}
return errorJObject;
}
else
{
errorMessages = new Dictionary<string, string>()
{
{"Exception", e.Message},
{"Details", string.Empty},
{"CorelationID", string.Empty}
};
return null;
}
}
}

// Function to get Error Details
private static Newtonsoft.Json.Linq.JObject GetResponseErrorObject(HttpWebResponse errorResponse, out Dictionary<string, string> error)
{
try
{
Newtonsoft.Json.Linq.JObject jObject;
using (Stream receivedstream = errorResponse.GetResponseStream())
using (StreamReader reader = new System.IO.StreamReader(receivedstream))
{
jObject = Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine());
}
error = new Dictionary<string, string>();
return jObject;
}
catch (Exception e)
{
error = new Dictionary<string, string>()
{
{"Exception", e.Message},
{"Details", e.Message},
{"CorelationID", string.Empty}
};

return null;
}

}
}
}