使用Microsoft Graph API上传文件到SharePoint无报错但执行停滞问题求助
我梳理下你的问题:你编写了一段调用Microsoft Graph API上传文件到SharePoint特定文件夹的代码,但是程序执行到var response = await _httpClient.PutAsync(requestUrl, content);这一行就停滞了,既不抛出异常也不继续执行,你已经配置了相关权限,现在需要找出问题原因并解决。
你当前使用的代码:
public async Task UploadFileAsync(string siteId, string driveId, string folderId, string fileName, byte[] fileContent, string accessToken) { HttpClient _httpClient = new HttpClient(); _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); try { var requestUrl = $"https://graph.microsoft.com/v1.0/sites/{siteId}/drives/{driveId}/items/{folderId}:/{fileName}:/content"; using (var content = new ByteArrayContent(fileContent)) { content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); var response = await _httpClient.PutAsync(requestUrl, content); if (response.IsSuccessStatusCode) { Console.WriteLine("File uploaded successfully."); } else { Console.WriteLine($"Failed to upload file. Status: {response.StatusCode}, Error: {await response.Content.ReadAsStringAsync()}"); } } } catch (Exception ex) { Console.WriteLine($"Exception: {ex.Message}"); } }
已配置的权限:

几个可能的排查方向,你可以逐一试试:
- 同步调用导致的死锁问题:如果你的调用方是同步代码(比如在控制台Main方法里用
UploadFileAsync().Wait()或者.Result),很可能因为异步上下文死锁导致停滞。建议把调用逻辑改成异步方式,比如将Main方法标记为async Task,用await UploadFileAsync(...)来调用。 - HttpClient实例复用问题:你每次调用方法都新建一个
HttpClient,这可能会导致TCP连接耗尽,进而卡住请求。建议复用一个全局的HttpClient实例,或者使用IHttpClientFactory来创建客户端,避免频繁创建销毁。 - 权限有效性验证:虽然截图里显示配置了
Files.ReadWrite.All等权限,但要确认这些权限是否已经获得管理员同意,并且你的access token中确实包含该权限范围。可以用jwt.ms解析你的token,检查scp或roles声明里有没有对应的权限。 - 请求参数正确性:确认
siteId、driveId、folderId这些参数是否完全正确,尤其是folderId必须是目标文件夹的ID(而非路径)。你可以先在Graph Explorer里手动调用这个接口,验证URL和参数是否能正常上传,排除参数错误的可能。 - 网络/代理问题:如果你的运行环境有代理服务器,HttpClient可能没有配置代理导致请求无法发送。可以检查网络连接,或者给HttpClient添加代理配置。
- 大文件传输问题:如果要上传的文件体积较大,直接用
PutAsync上传可能会出现超时或传输停滞。Microsoft Graph推荐大文件使用分片上传(可恢复上传),你可以试试换成分片上传的方式测试。
备注:内容来源于stack exchange,提问作者Pooja Parmar
相关产品推荐
相关产品推荐

