Microsoft Graph Extensions

Use toolkit extensions to help you make calls to Graph APIs using the global authentication provider. Available in the CommunityToolkit.Graph package, CommunityToolkit.Graph.Extensions namespace.

Call Microsoft Graph APIs

Once authenticated, you can make API calls to Microsoft Graph using a preconfigured GraphServiceClient instance. Access to the client is enabled through an extension method on IProvider called, GetClient().

using CommunityToolkit.Authentication;
using CommunityToolkit.Graph.Extensions;

IProvider provider = ProviderManager.Instance.GlobalProvider;

if (provider?.State == ProviderState.SignedIn)
{
    // Get the Graph client
    GraphServiceClient graphClient = provider.GetClient();

    // Make a request for the current user.
    var me = await graphClient.Me.Request().GetAsync();
}

Make Beta API calls

You can also get access to a beta version of the client by calling GetBetaClient(). It won't return types from the Beta SDK, but it does enable access to some beta-only content like user photos.

using CommunityToolkit.Authentication;
using CommunityToolkit.Graph.Extensions;

public ImageSource GetMyPhoto()
{
    IProvider provider = ProviderManager.Instance.GlobalProvider;

    if (provider?.State == ProviderState.SignedIn)
    {
        // Get the beta client
        GraphServiceClient betaGraphClient = provider.GetBetaClient();

        try
        {
            // Make a request to the beta endpoint for the current user's photo.
            var photoStream = await betaGraphClient.Me.Photo.Content.Request().GetAsync();

            using var ras = photoStream.AsRandomAccessStream();
            var bitmap = new BitmapImage();
            await bitmap.SetSourceAsync(ras);

            return bitmap;
        }
        catch
        {
            return null;
        }
    }
}

IProvider extension methods

The following extension methods are available on IProvider via the CommunityToolkit.Graph.Extensions namespace.

Method Arguments Returns Description
GetClient GraphServiceClient Retrieve pre-configured GraphServiceClient instance for making authenticated Graph calls, using the v1 endpoint.
GetBetaClient GraphServiceClient Retrieve pre-configured GraphServiceClient instance for making authenticated Graph calls, using the beta endpoint.

Handle Graph requests manually

Access APIs by managing requests to Microsoft Graph yourself. This is helpful for projects with existing systems for managing web requests, or for keeping package sizes minimal by excluding the Graph SDK.

To make Graph API calls manually, use the HttpRequestMessage.AuthenticateAsync() extension method to authenticate any outgoing requests.

using CommunityToolkit.Authentication;
using CommunityToolkit.Authentication.Extensions;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

private async Task<IList<TodoTask>> GetDefaultTaskListAsync()
{
    return await GetResponseAsync<List<TodoTask>>("https://graph.microsoft.com/v1.0/me/todo/lists/tasks/tasks");
}

private async Task<T> GetResponseAsync<T>(string requestUri)
{
    // Build the request
    var getRequest = new HttpRequestMessage(HttpMethod.Get, requestUri);

    // Authenticate the request using an extension on HttpRequestMessage.
    await getRequest.AuthenticateAsync();

    var httpClient = new HttpClient();
    using (httpClient)
    {
        // Send the request
        var response = await httpClient.SendAsync(getRequest);

        if (response.IsSuccessStatusCode)
        {
            // Handle the request response
            var jsonResponse = await response.Content.ReadAsStringAsync();
            var jObject = JObject.Parse(jsonResponse);
            if (jObject.ContainsKey("value"))
            {
                var result = JsonConvert.DeserializeObject<T>(jObject["value"].ToString());
                return result;
            }
        }
    }

    return default;
}

HttpRequestMessage extension methods

The extension methods are available on HttpRequestMessage via the CommunityToolkit.Authenticaiton.Extensions namespace.

Method Arguments Returns Description
AuthenticateAsync HttpRequestMessage Authenticate an http request using the current GlobalProvider instance.