Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce guide montre comment créer une application console .NET pour se connecter à un cluster Azure DocumentDB. Vous configurez votre environnement de développement, utilisez la Azure.Identity bibliothèque à partir du Kit de développement logiciel (SDK) Azure pour .NET pour vous authentifier et interagir avec la base de données pour créer, interroger et mettre à jour des documents.
Prerequisites
Un abonnement Azure
- Si vous n’avez pas d’abonnement Azure, créez un compte gratuit
Un cluster Azure DocumentDB existant
- Si vous n’avez pas de cluster, créez un cluster
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour obtenir plus d’informations, consultez Démarrage d’Azure Cloud Shell.
Si vous préférez exécuter des commandes de référence CLI localement, installez Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Comment exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour terminer le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour obtenir d’autres options de connexion, consultez S’authentifier auprès d’Azure à l’aide d’Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser et gérer des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
Authentification Microsoft Entra configurée pour le cluster avec votre identité bénéficiant d’un rôle
root.Dernière version de .NET.
Récupérer les métadonnées de l'instance Microsoft Entra
Pour récupérer un jeton d'accès à l'aide de la classe TokenCredential dans Azure.Identity, il vous faut l'identificateur unique du locataire Microsoft Entra. Dans cette étape requise, utilisez Azure CLI pour récupérer et enregistrer la tenantId valeur.
Obtenez les détails de l'abonnement Azure actuellement en cours de session en utilisant
az account show.az account showLa commande génère une réponse JSON contenant différents champs.
{ "environmentName": "AzureCloud", "homeTenantId": "eeeeffff-4444-aaaa-5555-bbbb6666cccc", "id": "dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b", "isDefault": true, "managedByTenants": [], "name": "example-azure-subscription", "state": "Enabled", "tenantId": "eeeeffff-4444-aaaa-5555-bbbb6666cccc", "user": { "cloudShellID": true, "name": "kai@adventure-works.com", "type": "user" } }Enregistrez la valeur de la
tenantIdpropriété. Cette propriété est l’identificateur unique de votre locataire Microsoft Entra et est parfois appelée ID de locataire. Vous utilisez cette valeur dans les étapes d’une section suivante.
Configurer votre application console
Ensuite, créez un projet d’application console et importez les bibliothèques nécessaires pour vous authentifier auprès de votre cluster.
Dans un répertoire vide, créez une application console .NET.
dotnet new consoleImportez le
Azure.Identitypackage à partir de NuGet.dotnet add package Azure.IdentityEnsuite, importez le
MongoDB.Driverpackage.dotnet add package MongoDB.DriverGénérer le projet .NET
dotnet build
Se connecter au cluster
À présent, utilisez la bibliothèque Azure.Identity pour obtenir un TokenCredential à utiliser afin de vous connecter à votre cluster. Le pilote MongoDB officiel a une interface spéciale qui doit être implémentée pour obtenir des jetons de Microsoft Entra à utiliser lors de la connexion au cluster.
Dans le fichier Program.cs, ajoutez des blocs d’utilisation pour ces espaces de noms
Azure.IdentityetMongoDB.Driver.using Azure.Identity; using MongoDB.Driver;Créez une classe dans un fichier distinct qui implémente tous les membres requis de l’interface
MongoDB.Driver.Authentication.Oidc.IOidcCallback.using Azure.Core; using MongoDB.Driver.Authentication.Oidc; internal sealed class AzureIdentityTokenHandler( TokenCredential credential, string tenantId ) : IOidcCallback { private readonly string[] scopes = ["https://ossrdbms-aad.database.windows.net/.default"]; public OidcAccessToken GetOidcAccessToken(OidcCallbackParameters parameters, CancellationToken cancellationToken) { AccessToken token = credential.GetToken( new TokenRequestContext(scopes, tenantId: tenantId), cancellationToken ); return new OidcAccessToken(token.Token, token.ExpiresOn - DateTimeOffset.UtcNow); } public async Task<OidcAccessToken> GetOidcAccessTokenAsync(OidcCallbackParameters parameters, CancellationToken cancellationToken) { AccessToken token = await credential.GetTokenAsync( new TokenRequestContext(scopes, parentRequestId: null, tenantId: tenantId), cancellationToken ); return new OidcAccessToken(token.Token, token.ExpiresOn - DateTimeOffset.UtcNow); } }Conseil / Astuce
À des fins d’illustration, cette classe est nommée
AzureIdentityTokenHandler. Vous pouvez nommer cette classe comme vous le souhaitez. Le reste de ce guide suppose que la classe est nomméeAzureIdentityTokenHandler.Revenez à l’éditeur du fichier Program.cs .
Créez une variable de chaîne avec le nom de votre cluster existant. Ensuite, utilisez cette variable pour créer une instance de type
MongoUrlà l’aide deMongoUrl.Createstring clusterName = "<azure-documentdb-cluster-name>"; MongoUrl url = MongoUrl.Create($"mongodb+srv://{clusterName}.global.mongocluster.cosmos.azure.com/");Configurez une nouvelle instance
MongoSettingsen utilisant ce qui a été créé avecMongoUrllors des étapes précédentes, et appliquez la configuration standard selon les meilleures pratiques pour Azure DocumentDB.MongoClientSettings settings = MongoClientSettings.FromUrl(url); settings.UseTls = true; settings.RetryWrites = false; settings.MaxConnectionIdleTime = TimeSpan.FromMinutes(2);Créez un nouvel identifiant de type
DefaultAzureCredential.DefaultAzureCredential credential = new();Conseil / Astuce
Vous pouvez utiliser les informations d’identification de type
TokenCredentialici.DefaultAzureCredentialest l'option la plus fluide pour les scénarios de développement précoces.Créez une instance de votre classe qui implémente
IOidcCallbacket configurez-la avec l’ID de locataire que vous avez enregistré précédemment dans ce guide.string tenantId = "<microsoft-entra-tenant-id>"; AzureIdentityTokenHandler tokenHandler = new(credential, tenantId);Configurez les informations d’identification de vos paramètres à l’aide de
MongoCredential.CreateOidcCredentialet en y passant votre implémentation de rappel de gestionnaire personnalisé.settings.Credential = MongoCredential.CreateOidcCredential(tokenHandler);Bloquez les paramètres, puis créez une nouvelle instance de
MongoClient.settings.Freeze(); MongoClient client = new(settings); Console.WriteLine("Client created");
Effectuer des opérations courantes
Enfin, utilisez la bibliothèque officielle pour effectuer des tâches courantes avec des bases de données, des collections et des documents. Ici, vous utilisez les mêmes classes et méthodes que celles que vous utiliseriez pour interagir avec MongoDB ou DocumentDB pour gérer vos collections et éléments.
Représentez vos documents en créant un type d’enregistrement personnalisé dans un fichier distinct.
public record Product( string id, string category, string name, int quantity, decimal price, bool clearance );Conseil / Astuce
À des fins d’illustration, ce struct est nommé
Product. Le reste de ce guide suppose que vous avez déjà défini ce struct.Revenez au fichier Program.cs .
Obtenez un pointeur vers votre base de données à l’aide de
MongoClient.GetDatabase.string databaseName = "<database-name>"; IMongoDatabase database = client.GetDatabase(databaseName); Console.WriteLine("Database pointer created");Ensuite, utilisez le pointeur de base de données pour obtenir un pointeur vers votre collection en utilisant
IMongoDatabase.GetCollection<>.string collectionName = "<collection-name>"; IMongoCollection<Product> collection = database.GetCollection<Product>(collectionName); Console.WriteLine("Collection pointer created");Créez et upsertez deux documents à l’aide de la
IMongoCollection<>.ReplaceOneAsyncméthode.Product classicSurfboard = new( id: "bbbbbbbb-1111-2222-3333-cccccccccccc", category: "gear-surf-surfboards", name: "Kiama Classic Surfboard", quantity: 25, price: 790.00m, clearance: false ); Product paddleKayak = new( id: "cccccccc-2222-3333-4444-dddddddddddd", category: "gear-paddle-kayaks", name: "Lastovichka Paddle Kayak", quantity: 10, price: 599.99m, clearance: true ); await collection.ReplaceOneAsync<Product>( doc => doc.id == classicSurfboard.id, classicSurfboard, new ReplaceOptions { IsUpsert = true } ); Console.WriteLine($"Upserted document:\t{classicSurfboard.id}"); await collection.ReplaceOneAsync<Product>( doc => doc.id == paddleKayak.id, paddleKayak, new ReplaceOptions { IsUpsert = true } ); Console.WriteLine($"Upserted document:\t{paddleKayak.id}");Lire un document unique de la collection à l’aide
IMongoCollection<>.FindetIFindFluent<,>.SingleAsync. Utilisez un filtre pour spécifier le document spécifique que vous souhaitez rechercher.Product document = await collection.Find( doc => doc.id == "cccccccc-2222-3333-4444-dddddddddddd" ).SingleAsync(); Console.WriteLine($"Found document:\t{document.name}");Recherchez tous les documents qui correspondent à un filtre à l’aide de la même
Findméthode. Utilisez un filtre pour définir une propriété spécifique (commecategory) et une valeur spécifique (par exemplegear-surf-surfboards). Énumérez les résultats à l’aide deIFindFluent<,>.ToListAsync.List<Product> documents = await collection.Find( doc => doc.category == "gear-surf-surfboards" ).ToListAsync(); foreach (Product doc in documents) { Console.WriteLine($"Queried document:\t{doc}"); }Supprimez un document spécifique de la collection à l’aide
IMongoCollection<>.DeleteOneAsyncet un filtre.await collection.DeleteOneAsync( doc => doc.id == "bbbbbbbb-1111-2222-3333-cccccccccccc" ); Console.WriteLine($"Deleted document");Enregistrez tous les fichiers de code dans le projet.
Exécuter le projet à l’aide de
dotnet rundotnet runObservez la sortie de l’application en cours d’exécution.
Client created Database pointer created Collection pointer created Upserted document: bbbbbbbb-1111-2222-3333-cccccccccccc Upserted document: cccccccc-2222-3333-4444-dddddddddddd Found document: Lastovichka Paddle Kayak Queried document: Product { id = bbbbbbbb-1111-2222-3333-cccccccccccc, category = gear-surf-surfboards, name = Kiama Classic Surfboard, quantity = 25, price = 790.00, clearance = False } Deleted document