Hi friends,
I am trying to do crud operations using webapi in console application. I have followed this blog(rajeevpentyala.com/.../code-snippet-authenticate-and-perform-operations-using-d365-web-api-and-c) and did changes but i got An unhandled exception of type 'System.AggregateException' occurred in mscorlib.dll.
In this line "authResult = context.AcquireTokenAsync(serviceUrl, applicationId, credentials).Result;" I am getting error and while debugging i found username and password is null. can anyone help me.
This is the code I have written
=======================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.Net;
using System.Threading.Tasks;
namespace Azure
{
class Program
{
// O365 User Name and Password
private const string userName = "userone@user1.onmicrosoft.com";
private const string password = abc@abc;
// D365 Application Url
private const string serviceUrl = "https://abc.crm8.dynamics.com";
// Azure APP Application Id
private const string applicationId = "3d4835ec-1068-4138-94d7-a4f084d2cf48";
// Redirct Uri specified during registration of application
private const string RedirectUri = "https://localhost";
// OAuth 2.0 Authorization Endpoint copied from Azure APP
private const string authorityUri = "login.microsoftonline.com/.../authorize";
private static AuthenticationResult authResult = null;
private static void Main(string[] args)
{
// Code to connect to D365
var credentials = new UserPasswordCredential(userName, password);
var context = new AuthenticationContext(authorityUri);
authResult = context.AcquireTokenAsync(serviceUrl, applicationId, credentials).Result;
// Call CRUD operations
Task.WaitAll(Task.Run(async () => await ExecuteWhoAmI()));
// Task.WaitAll(Task.Run(async () => await CreateRecord()));
Task.WaitAll(Task.Run(async () => await RetrieveContacts()));
}
private static async Task ExecuteWhoAmI()
{
var httpClient = new HttpClient
{
BaseAddress = new Uri(serviceUrl),
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", authResult.AccessToken);
// Add this line for TLS complaience
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
// Call WhoAmI
var retrieveResponse = await httpClient.GetAsync("api / data / v9.0 / WhoAmI");
if (retrieveResponse.IsSuccessStatusCode)
{
var jRetrieveResponse = JObject.Parse(retrieveResponse.Content.ReadAsStringAsync().Result);
var currUserId = (Guid)jRetrieveResponse["UserId"];
var businessId = (Guid)jRetrieveResponse["BusinessUnitId"];
Console.WriteLine("My User Id – " + currUserId);
Console.WriteLine("My User Id – " + businessId);
Console.ReadLine();
}
}
private static async Task RetrieveContacts()
{
var httpClient = new HttpClient
{
BaseAddress = new Uri(serviceUrl),
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", authResult.AccessToken);
// Add this line for TLS complaience
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
// Retrieve Contacts
var retrieveResponse = await httpClient.GetAsync("api / data / v9.0 / contacts");
if (retrieveResponse.IsSuccessStatusCode)
{
var jRetrieveResponse = JObject.Parse(retrieveResponse.Content.ReadAsStringAsync().Result);
dynamic collContacts = JsonConvert.DeserializeObject(jRetrieveResponse.ToString());
foreach (var data in collContacts.value)
{
Console.WriteLine("Contact Name – " +data.fullname.Value);
}
Console.ReadLine();
}
}
}
}