A Simple Web API Helper
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;
}
}
}
}
Usage Example
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<bool>(url);</bool>