Anpassen des Microsoft Graph SDK-Dienstclients

Der Microsoft Graph SDK-Client konfiguriert einen Standardsatz von Middleware, der es dem SDK ermöglicht, mit den Microsoft Graph-Endpunkten zu kommunizieren. Dieser Standardsatz kann angepasst werden, sodass Sie das Verhalten des Clients ändern können. Sie können beispielsweise eine benutzerdefinierte Protokollierung einfügen oder einen Testhandler hinzufügen, um bestimmte Szenarien zu simulieren. Sie können Middlewarekomponenten hinzufügen und entfernen. Es ist wichtig zu beachten, dass die Reihenfolge, in der Middlewarekomponenten ausgeführt werden, signifikant ist.

// using Azure.Identity;
// https://learn.microsoft.com/dotnet/api/azure.identity.interactivebrowsercredential
var interactiveCredential = new InteractiveBrowserCredential(...);

var authProvider = new AzureIdentityAuthenticationProvider(tokenCredential, scopes: scopes);

var handlers = GraphClientFactory.CreateDefaultHandlers();

// Remove a default handler
var compressionHandler =
    handlers.Where(h => h is CompressionHandler).FirstOrDefault();
handlers.Remove(compressionHandler);

// Add a new one
// ChaosHandler simulates random server failures
handlers.Add(new ChaosHandler());

var httpClient = GraphClientFactory.Create(handlers);

var customGraphClient = new GraphServiceClient(httpClient, authProvider);

var messages = await graphClient.Me.Messages
        .GetAsync(requestConfiguration => 
        {
            requestConfiguration.QueryParameters.Top = 100;
            requestConfiguration.QueryParameters.Select = new string[] { "subject" };
        });

Konfigurieren des HTTP-Proxys für den Client

Einige Umgebungen erfordern, dass Clientanwendungen einen HTTP-Proxy verwenden, bevor sie auf das öffentliche Internet zugreifen können. In diesem Abschnitt wird gezeigt, wie Sie den Proxy für die Microsoft Graph SDKs konfigurieren.

// URI to proxy
var proxyAddress = "http://localhost:8888";

// Create a new System.Net.Http.HttpClientHandler with the proxy
var handler = new HttpClientHandler
{
    // Create a new System.Net.WebProxy
    // See WebProxy documentation for scenarios requiring
    // authentication to the proxy
    Proxy = new WebProxy(new Uri(proxyAddress))
};

// Create an options object for the credential being used
// For example, here we're using a ClientSecretCredential so
// we create a ClientSecretCredentialOptions object
var options = new ClientSecretCredentialOptions
{
    // Create a new Azure.Core.HttpClientTransport
    Transport = new HttpClientTransport(handler)
};

var credential = new ClientSecretCredential(
    "YOUR_TENANT_ID",
    "YOUR_CLIENT_ID",
    "YOUR_CLIENT_SECRET",
    options
);

var scopes = new[] { "https://graph.microsoft.com/.default" };

// This example works with Microsoft.Graph 5+
var httpClient = GraphClientFactory.Create(proxy: new WebProxy(new Uri(proxyAddress)));

var graphClient = new GraphServiceClient(httpClient, new AzureIdentityAuthenticationProvider(credential, scopes: scopes));