Install Required Libraries
- Use the Microsoft.Graph NuGet package to interact with the Microsoft Graph API. Install it using the NuGet Package Manager Console in Visual Studio with the following command:
Install-Package Microsoft.Graph
Register Your Application and Get Authentication Token
- Implement authentication using an appropriate OAuth 2.0 library, such as `Microsoft.Identity.Client` (MSAL). This library helps to obtain an authentication token to grant access to the API.
- Install the MSAL package:
Install-Package Microsoft.Identity.Client
- Create an instance of `PublicClientApplication` to manage user authentication and token acquisition. Ensure your application is registered in Azure AD and has the proper delegated permissions for accessing OneDrive files.
var clientId = "YOUR_CLIENT_ID";
var tenantId = "YOUR_TENANT_ID";
var clientApp = PublicClientApplicationBuilder.Create(clientId)
.WithAuthority(AzureCloudInstance.AzurePublic, tenantId)
.WithDefaultRedirectUri()
.Build();
string[] scopes = { "Files.ReadWrite.All" };
Acquire Access Tokens
- Implement the logic to acquire an OAuth token. This typically involves prompting the user for their credentials the first time and caching the token for future use.
AuthenticationResult authResult = await clientApp.AcquireTokenInteractive(scopes).ExecuteAsync();
Initialize Graph Client
- Use the token from the authentication process to authenticate requests to the Microsoft Graph API by creating a client instance.
var graphClient = new GraphServiceClient(new DelegateAuthenticationProvider((requestMessage) =>
{
requestMessage.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", authResult.AccessToken);
return Task.CompletedTask;
}));
Perform File Operations on OneDrive
- Use the `graphClient` to perform OneDrive actions like uploading, downloading, listing, and deleting files.
- Example: Upload a file to OneDrive:
using var fileStream = new FileStream("path/to/your/file.txt", FileMode.Open);
await graphClient.Me.Drive.Root.ItemWithPath("/file.txt").Content.Request().PutAsync<DriveItem>(fileStream);
- Example: Download a file from OneDrive:
var fileStream = await graphClient.Me.Drive.Items["fileId"].Content.Request().GetAsync();
using (var file = new FileStream("downloaded_file.txt", FileMode.Create))
{
fileStream.CopyTo(file);
}
- Example: List files in the root directory:
var driveItems = await graphClient.Me.Drive.Root.Children.Request().GetAsync();
foreach (var item in driveItems)
{
Console.WriteLine(item.Name);
}
Handle Exceptions and Errors
- Implement proper error handling mechanisms to handle issues like network connectivity problems, authentication failures, and permission errors.
- Use try-catch blocks around API calls to gracefully handle exceptions and give informative error messages to the user.
try
{
// Your API call here
}
catch (ServiceException ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
Keep Tokens Secure
- Avoid hardcoding sensitive information like access tokens or client credentials. Instead, use secure methods such as Azure Key Vault, environment variables, or configuration files with proper encryption.