GetAllEnabledUsers: C# example

 
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 = "companyKey"; // Enter Company key
            string LN = "LoginName"; // Enter Login Name
            string PWD = "Password"; // 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, LN, PWD); // 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(UN, PWD, 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 username, string password)
        {
            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(string.Empty, string.Empty, 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 UN, string pwd, 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.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;
            }
 
        }
    }
}