我必须将文件上传到特定文件夹内的共享点位置,为此我添加了以下代码行,
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}");
}
}
但是这段代码对我不起作用,即使它没有抛出任何错误。当我调试代码时,它停在以下行:
var response = await _httpClient.PutAsync(requestUrl, content);
我已分配以下权限:
任何人都可以帮我解决这个问题吗?
您似乎已设置权限并实现了代码以使用 Microsoft Graph API 将文件上传到 SharePoint 文件夹,但代码执行停在以下行:
var response = await _httpClient.PutAsync(requestUrl, content);
请确保授予以下权限:
Microsoft Graph - Files.ReadWrite.All:需要完全访问用户可以访问的所有文件。 SharePoint - Sites.FullControl.All:允许完全控制所有网站集,这通常是上传文件所必需的。 确保这些权限已获得管理员同意。
确保您使用的访问令牌具有正确的范围。它应包含 Files.ReadWrite.All 或 Sites.FullControl.All 等权限。如果令牌范围不正确,您的请求将默默失败。
也请尝试使用文件夹路径而不是folderId,例如:
var requestUrl = $"https://graph.microsoft.com/v1.0/sites/{siteId}/drives/{driveId}/root:/{folderPath}/{fileName}:/content";
如果程序仅在 PutAsync() 处停止,则可能是网络问题或超时。
请尝试以下操作: 增加超时:设置 HttpClient 的超时。
_httpClient.Timeout = TimeSpan.FromMinutes(5);
另请检查代理和防火墙设置。
由于 PutAsync 调用刚刚停止,因此可能存在未处理的异常。考虑将 PutAsync 包装在 try-catch 块中并详细记录异常:
尝试:
{
var response = await _httpClient.PutAsync(requestUrl, content);
}
catch (HttpRequestException httpEx)
{
Console.WriteLine($"HttpRequestException: {httpEx.Message}");
}
catch (TaskCanceledException tcex)
{
Console.WriteLine($"TaskCanceledException (likely a timeout): {tcex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"Unexpected Exception: {ex.Message}");
}
如果响应不是 IsSuccessStatusCode,请检查响应以获取更多信息:
var response = await _httpClient.PutAsync(requestUrl, content);
if (!response.IsSuccessStatusCode)
{
var errorContent = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Failed to upload file. Status Code:
{response.StatusCode}, Error: {errorContent}");
}
您可以尝试使用 Microsoft Graph SDK,而不是直接使用 HttpClient:
安装 SDK 并获取代码,如果需要帮助,请告诉我。