Authenticate Your Application
- Before accessing the OneDrive API, you need to authenticate your application using OAuth 2.0. Obtain an access token by using the Microsoft Identity platform.
- Use the Microsoft Authentication Library (MSAL) for C# to handle authentication. You will need to register your application in the Azure portal to get the necessary credentials.
var app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithRedirectUri(redirectUri)
.WithAuthority(new Uri(authority))
.Build();
var result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
var accessToken = result.AccessToken;
Setting Up HTTP Client
- Use
HttpClient
for making API requests. The HttpClient
should include the authorization header with the obtained access token.
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
List Files in OneDrive
- Make a GET request to the OneDrive API endpoint to list files. Use the user's root or a specific folder path.
- Handle pagination when listing many files, the API may return a
nextLink
for additional files.
var response = await httpClient.GetAsync("https://graph.microsoft.com/v1.0/me/drive/root/children");
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
Upload a File
- To upload a file, use a PUT request with the file's content. Specify the target file path in your OneDrive.
- Consider using the "CreateUploadSession" API for large files to upload in chunks to handle network disruptions efficiently.
var content = new ByteArrayContent(fileBytes);
var uploadResponse = await httpClient.PutAsync("https://graph.microsoft.com/v1.0/me/drive/items/root:/path/to/your/file:/content", content);
Console.WriteLine(uploadResponse.StatusCode);
Download a File
- Download a file using a GET request by specifying the file's path in the API URL, then read the response stream.
var downloadResponse = await httpClient.GetAsync("https://graph.microsoft.com/v1.0/me/drive/items/file-id/content");
var fileStream = await downloadResponse.Content.ReadAsStreamAsync();
Delete a File
- Invoke a DELETE request on the specific item URI in the OneDrive to remove a file.
var deleteResponse = await httpClient.DeleteAsync("https://graph.microsoft.com/v1.0/me/drive/items/file-id");
Console.WriteLine(deleteResponse.StatusCode);
Error Handling & Considerations
- Implement error handling for network issues and incorrect API calls. Use try-catch blocks to manage exceptions and handle HTTP error status codes gracefully.
- Stay updated with API changes and rate limits. Implement retry policies for transient errors, and consider logging all API requests for further analysis.
try {
var response = await httpClient.GetAsync("your-api-url");
response.EnsureSuccessStatusCode();
}
catch(HttpRequestException ex) {
// Handle error
}