Wiki

Clone wiki

Numera.LibrisAPI / sample_csharp

Home > API Overview > JSON API > C# Sample

C# Sample

This is a simplified console sample of how to execute the realm.view action against the staging environment. This sample uses the Newtonsoft JSON libraries.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Security.Cryptography;
using Newtonsoft.Json.Linq;
using System.Net;

public class ApiTester
{
	private static DateTime _utc = new DateTime(1970,1,1,0,0,0, DateTimeKind.Utc);
	private static string _application_id = "contoso-api";
	private static byte[] _key = Encoding.ASCII.GetBytes("472cccd50bfdfbdf87ad8f632e5fadf5");

	public static void Main(string[] args)
	{
		JObject partnerToken = new JObject();
		partnerToken.Add("id", _application_id);
		partnerToken.Add("r", "dev");

		TimeSpan nonceSpan = DateTime.UtcNow.Subtract(_utc);
		long nonce = Convert.ToInt64(nonceSpan.TotalSeconds);
		partnerToken.Add("n", nonce);

		string toSign = _application_id + nonce.ToString() + "view";

		string signature = Base64UrlEncode(new HMACSHA256(_key).ComputeHash(Encoding.ASCII.GetBytes(toSign)));
		partnerToken.Add("p", signature);

		JObject request = new JObject();
		request.Add("action", "realm.view");

		JObject data = new JObject();
		data.Add("partner_token", partnerToken);
		data.Add("realm", "dev");

		request.Add("data", data);

		Console.WriteLine(request.ToString());

		using (WebClient client = new WebClient())
	        {
	            client.Headers.Add(HttpRequestHeader.Accept, "application/json");
	            client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
	            client.Encoding = Encoding.UTF8;
	            string response = client.UploadString("https://stage.bluelibris.com/sdk/v1/realm/view", "POST", request.ToString());
	            Console.WriteLine(response);
	        }

	}

	private static string Base64UrlEncode(byte[] args)
	{
	    string s = Convert.ToBase64String(args);
	    
	    s = s.Replace('+', '-'); //62nd char
	    s = s.Replace('/', '_'); //63rd
	    return s;
	} 
}

Updated