c# - 我无法使用 c# 将文件上传到一个驱动器
问题描述
当我尝试使用 Microsoft Graph API 将文件上传到我的 OneDrive 时收到错误 400 Bad Request
GetAccessToken 方法获取访问令牌
上传方法获取文件路径并将其上传到我的OneDrive帐户
public class OneDrive { public void Upload(string filePath) { var token = GetAccessToken(); var url = "https://graph.microsoft.com/v1.0/drive/root:/test/test.pdf:/content"; PostRequest(url, token, filePath).Wait(); } public string GetAccessToken() { var app = ConfidentialClientApplicationBuilder.Create("client id ") .WithClientSecret("client secret") .WithAuthority("https://login.microsoftonline.com/{tenant id}/v2.0") .Build(); string[] scopes = new string[] { "https://graph.microsoft.com/.default" }; try { var result = app.AcquireTokenForClient(scopes).ExecuteAsync().Result; Console.WriteLine(result.TenantId); return result.AccessToken; } catch (MsalServiceException ex) when (ex.Message.Contains("AADSTS70011")) { Console.WriteLine(ex.Message); return null; } } public async Task PostRequest(string webApiUrl, string accessToken, string filePath) { HttpContent content = new StreamContent(new MemoryStream(File.ReadAllBytes(filePath))); HttpClient httpClient = new HttpClient(); if (!string.IsNullOrEmpty(accessToken)) { var defaultRequestHeaders = httpClient.DefaultRequestHeaders; httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream")); defaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", accessToken); HttpResponseMessage response = await httpClient.PutAsync(webApiUrl, content); if (response.IsSuccessStatusCode) Console.WriteLine("File Successfuly Uploaded"); else Console.WriteLine("Error Occur"); } } }
解决方案
推荐阅读
- javascript - JSON。JAVA 和 PHP 检查表单值是否存在
- solr - SOLR - 从给定搜索请求的相交多边形中获取所有文档条目
- java - 不是一个文件中的 JSON 对象异常,但不同的 json 文件有效
- postgresql - Symfony 4 + Api 平台无法自动验证类型为“NULL”的值。在 nativeSQL 查询上
- c - 计算一个数字的除数的最佳算法是什么?
- python - 字符串中两个字母之间的距离
- docker - Traefik 未将请求路径传递给 Strapi CMS
- git - svn:从远程 git 存储库的特定提交中导出文件夹
- react-native - React Native Modal:透明背景和布局问题
- django - 黑客是如何产生这个 GET 请求的?