I've done it two ways but the most recent version looks like this:
Get Token Code
var formContent = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("resource", Resource),
new KeyValuePair<string, string>("client_id", ClientId),
new KeyValuePair<string, string>("client_secret", ClientSecret),
new KeyValuePair<string, string>("grant_type", "client_credentials")
});
HttpResponseMessage response = await httpClient.PostAsync(Authority, formContent);
return !response.IsSuccessStatusCode ? null
: response.Content.ReadAsStringAsync().Result;
Web Service Call
using (HttpClient httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri(Resource);
httpClient.Timeout = new TimeSpan(0, 2, 0);
httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0");
httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0");
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", _accessToken);
//Retrieve
HttpResponseMessage retrieveResponse =
await httpClient.GetAsync($"api/data/v8.2/entityName?$select=fieldName&$filter=contains(fieldName,'{sParameter}')");
if (retrieveResponse.IsSuccessStatusCode)
{
JObject jRetrieveResponse =
JObject.Parse(retrieveResponse.Content.ReadAsStringAsync().Result);
JObject row = (JObject)JArray.Parse(jRetrieveResponse["value"].ToString())[0];
string sGuid = row["core_fc_profileid"].ToString();
sURL = string.Format("{0}/main.aspx?etn={1}&pagetype=entityrecord&id=%7B{2}%7D",
"CRM URL", "core_fc_profile", sGuid);
}
else
{
var result = await retrieveResponse.Content.ReadAsStringAsync();
}
return sURL;
}
The original code was more like:
DataCollection<Entity> retrievedFile =
CRMCommonTools.OrgConnection.RetrieveMultiple(queryQueuePrivileges).Entities;
if (retrievedFile.Count == 1)
{
sCaseFileID = retrievedFile[0].Id.ToString();
return sCaseFileID;
}
else
throw new Exception(String.Format("Cannot find unique File for ID = {0}", sCaseFileName));
}
All of them cause the same problem but all WORK when called from a Windows/desktop app.