Home

User Information or send mail with Graph API httpclient.SendAsync error

%3CLINGO-SUB%20id%3D%22lingo-sub-83959%22%20slang%3D%22en-US%22%3EUser%20Information%20or%20send%20mail%20with%20Graph%20API%20httpclient.SendAsync%20error%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-83959%22%20slang%3D%22en-US%22%3E%3CP%3EI%20am%20trying%20to%20build%20my%20first%20Graph%20API%20app.%20I%20have%20a%20console%20app%20and%20have%20registered%20the%20app%20in%20Azure%20AD.%3C%2FP%3E%3CP%3ESteps%20i%20followed%20till%20now%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EIn%20Azure%3C%2FP%3E%3CP%3E1)%20After%20registering%20the%20app%20i%20can%20get%20the%20Application%20ID%20(%20client%20ID%20)%20and%20added%20a%20key%20so%20key%20value%20as%20(%20client%20secret).%26nbsp%3B%3C%2FP%3E%3CP%3E2)%20Added%20a%20test%20user%20with%20global%20admin%20role%20to%20AD%26nbsp%3B%3C%2FP%3E%3CP%3E3)%26nbsp%3BAdded%20the%20same%20user%20to%20Owners%3C%2FP%3E%3CP%3E4)%20under%20Required%20Permission%20added%20graph%20api%20with%20Read%20%2Fwrite%20access%20to%20user%20and%20mails%20(%20Application%20and%20delegate%20permissions%20)%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EConsole%20App%26nbsp%3B%3C%2FP%3E%3CP%3E1)%20Called%20a%20get%20access%20token%20function%26nbsp%3B%3C%2FP%3E%3CP%3E2)%20Then%20used%20the%20token%20with%20http%20client%20to%20make%20a%20request%20to%20graph%20url%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%3E%20public%20static%20string%20GetAccessToken()%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Step%3A%20Get%20the%20access%20token%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Create%20the%20authentication%20context%20(ADAL)%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20authenticationContext%20%3D%20new%20AuthenticationContext(Authority)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Get%20the%20access%20token%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2FKJ%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2Fvar%20authenticationResult%20%3D%20authenticationContext.AcquireToken(GraphResource%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%20%20%20ClientId%2C%20RedirectUri%2C%20PromptBehavior.RefreshSession)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20ClientCredential%20clientCred%20%3D%20new%20ClientCredential(AppModeConstants.ClientId%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20AppModeConstants.ClientSecret)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2Fvar%20authenticationResult%20%3D%20authenticationContext.AcquireTokenAsync(GraphResource%2C%20ClientId%2C%20RedirectUri%2C%20new%20PlatformParameters(0)).Result.AccessToken%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20authenticationResult%20%3D%20authenticationContext.AcquireTokenAsync(GraphResource%2C%20clientCred).Result.AccessToken%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20accessToken%20%3D%20authenticationResult%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20accessToken%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%0A%0Apublic%20static%20async%20Task%26lt%3Bstring%26gt%3B%20GetMyEmailAddress()%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20string%20accessToken%20%3D%20Model.MailClient.GetAccessToken()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Get%20the%20current%20user.%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20The%20app%20only%20needs%20the%20user's%20email%20address%2C%20so%20select%20the%20mail%20and%20userPrincipalName%20properties.%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20If%20the%20mail%20property%20isn't%20defined%2C%20userPrincipalName%20should%20map%20to%20the%20email%20for%20all%20account%20types.%20%0A%20%20%20%20%20%20%20%20%20%20%20%20string%20endpoint%20%3D%20%22https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fme%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20string%20queryParameter%20%3D%20%22%3F%24select%3Dmail%2CuserPrincipalName%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20UserInfo%20me%20%3D%20new%20UserInfo()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20using%20(var%20client%20%3D%20new%20HttpClient())%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20using%20(var%20request%20%3D%20new%20HttpRequestMessage(HttpMethod.Get%2C%20endpoint%20%2B%20queryParameter))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20request.Headers.Accept.Add(new%20MediaTypeWithQualityHeaderValue(%22application%2Fjson%22))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20request.Headers.Authorization%20%3D%20new%20AuthenticationHeaderValue(%22Bearer%22%2C%20accessToken)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20This%20header%20has%20been%20added%20to%20identify%20our%20sample%20in%20the%20Microsoft%20Graph%20service.%20If%20extracting%20this%20code%20for%20your%20project%20please%20remove.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2Frequest.Headers.Add(%22SampleID%22%2C%20%22aspnet-connect-rest-sample%22)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20using%20(var%20response%20%3D%20await%20client.SendAsync(request))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(response.IsSuccessStatusCode)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20json%20%3D%20JObject.Parse(await%20response.Content.ReadAsStringAsync())%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2Fme.Address%20%3D%20!string.IsNullOrEmpty(json.GetValue(%22mail%22).ToString())%20%3F%20json.GetValue(%22mail%22).ToString()%20%3A%20json.GetValue(%22userPrincipalName%22).ToString()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2Freturn%20me.Address%3F.Trim()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%22temp%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%3C%2FPRE%3E%3CP%3EBut%20i%20get%20no%20response%20back%20as%20i%20execute%26nbsp%3B%3C%2FP%3E%3CPRE%3Eclient.SendAsync(request)%3C%2FPRE%3E%3CP%3EI%20also%20tried%20with%20other%20url%20but%20to%20no%20use%2C%20Can%20someone%20help%20with%20this.%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EThanks%2C%3C%2FP%3E%3CP%3EKJ%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-83959%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3EAPI%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-100823%22%20slang%3D%22en-US%22%3ERe%3A%20User%20Information%20or%20send%20mail%20with%20Graph%20API%20httpclient.SendAsync%20error%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-100823%22%20slang%3D%22en-US%22%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3ESuggested%20to%20download%20the%20sample%20code%20from%20github%20and%20have%20a%20look.%20Or%20watch%20a%20startup%20in%20youtube.%20It%20won't%20take%20more%20than%20your%20troubleshooting.%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E
Kanwar Jot Singh
Contributor

I am trying to build my first Graph API app. I have a console app and have registered the app in Azure AD.

Steps i followed till now

 

In Azure

1) After registering the app i can get the Application ID ( client ID ) and added a key so key value as ( client secret). 

2) Added a test user with global admin role to AD 

3) Added the same user to Owners

4) under Required Permission added graph api with Read /write access to user and mails ( Application and delegate permissions ) 

 

Console App 

1) Called a get access token function 

2) Then used the token with http client to make a request to graph url 

 

 public static string GetAccessToken()
        {
            // Step: Get the access token
            // Create the authentication context (ADAL)            
            var authenticationContext = new AuthenticationContext(Authority);

            // Get the access token
            //KJ
            //var authenticationResult = authenticationContext.AcquireToken(GraphResource,
            //    ClientId, RedirectUri, PromptBehavior.RefreshSession);
            ClientCredential clientCred = new ClientCredential(AppModeConstants.ClientId,
                   AppModeConstants.ClientSecret);
            //var authenticationResult = authenticationContext.AcquireTokenAsync(GraphResource, ClientId, RedirectUri, new PlatformParameters(0)).Result.AccessToken;
            var authenticationResult = authenticationContext.AcquireTokenAsync(GraphResource, clientCred).Result.AccessToken;
            var accessToken = authenticationResult;

            return accessToken;
        }



public static async Task<string> GetMyEmailAddress()
        {
            string accessToken = Model.MailClient.GetAccessToken();
            // Get the current user. 
            // The app only needs the user's email address, so select the mail and userPrincipalName properties.
            // If the mail property isn't defined, userPrincipalName should map to the email for all account types. 
            string endpoint = "https://graph.microsoft.com/v1.0/me";
            string queryParameter = "?$select=mail,userPrincipalName";
            UserInfo me = new UserInfo();
            
            using (var client = new HttpClient())
            {
                using (var request = new HttpRequestMessage(HttpMethod.Get, endpoint + queryParameter))
                {
                    request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

                    // This header has been added to identify our sample in the Microsoft Graph service. If extracting this code for your project please remove.
                    //request.Headers.Add("SampleID", "aspnet-connect-rest-sample");

                    using (var response = await client.SendAsync(request))
                    {
                        if (response.IsSuccessStatusCode)
                        {
                            var json = JObject.Parse(await response.Content.ReadAsStringAsync());
                            //me.Address = !string.IsNullOrEmpty(json.GetValue("mail").ToString()) ? json.GetValue("mail").ToString() : json.GetValue("userPrincipalName").ToString();
                        }
                        //return me.Address?.Trim();
                        return "temp";
                    }
                }
            }
        }

But i get no response back as i execute 

client.SendAsync(request)

I also tried with other url but to no use, Can someone help with this.

 

Thanks,

KJ

1 Reply

 

Suggested to download the sample code from github and have a look. Or watch a startup in youtube. It won't take more than your troubleshooting. 

Related Conversations
Extentions Synchronization
Deleted in Discussions on
3 Replies
Tabs and Dark Mode
cjc2112 in Discussions on
35 Replies
flashing a white screen while open new tab
Deleted in Discussions on
14 Replies
Stable version of Edge insider browser
HotCakeX in Discussions on
35 Replies