12 Jul 2017
This post gives you the code to help you build an API url with the parameters and a quick way to call a simple get method and parse the results to the object you are expecting back from the API.
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Net.Http; using System.Text; using System.Threading.Tasks; namespace SupplierPortal.Library.Helpers { public class ApiHelper { public string BuildApiUrl(string domainAddress, string controllerName, string methodName, List<KeyValuePair<string, object>> parameters, string apiLocation) { StringBuilder url = new StringBuilder(); url.Append($"{domainAddress}/{apiLocation}{controllerName}/{methodName}"); if (parameters != null && parameters.Count > 0) { int parameterCount = parameters.Count; for (int i = 0; i < parameterCount; i++) { url.Append(i == 0 ? "?" : "&"); url.Append($"{parameters[i].Key}={parameters[i].Value.ToString()}"); } } return url.ToString(); } public T GetResultFromApi<T>(string url) { using (HttpClient httpClient = new HttpClient()) { Task<String> response = httpClient.GetStringAsync(url); return Task.Factory.StartNew(() => JsonConvert.DeserializeObject<T>(response.Result)).Result; } } } }
And here is how you would call it.
using CodeShare.Library.Helpers;
var user = new HttpContextWrapper(HttpContext.Current).User; List<KeyValuePair<string, object>> parameters = new List<KeyValuePair<string, object>>(); parameters.Add(new KeyValuePair<string, object>("username", user.Identity.Name)); parameters.Add(new KeyValuePair<string, object>("mediaPath", context.Request.FilePath)); ApiHelper apiHelper = new ApiHelper();
string url = apiHelper.BuildApiUrl( domainAddress: "http://www.example.com", apiLocation: "Umbraco/Api/", controllerName: "ProtectedMediaApi", methodName: "IsAllowed", parameters: parameters);
bool isAllowed = apiHelper.GetResultFromApi(url);