使用Graph API获取文件内容时返回Null流值的问题排查
问题描述
我尝试通过Graph API从SharePoint站点文档文件夹获取文件流,但每次返回Null。该功能几天前还正常运行,突然失效。我的应用类型权限如下:
- Sites.FullControl.All(及所有更低权限,以防万一)
- Files.ReadWrite.All(仅针对文件)
相关代码实现
获取文件流方法
public async Task<Stream> GetFileStreamAsync(string filePath) { var driveId = await GetDriveId(_settings.Url, LIST_ID); var driveItem = await GetDriveItemAsync(filePath, driveId); try { var content = await _graphClient.Drives[driveId].Items[driveItem.Id].Content.GetAsync().ConfigureAwait(false); return !content.CanSeek ? null : content; } catch (ODataError ex) { _logService.Log("_SharepointService", $"Error on getting file stream with filePath: {filePath}:{ex.Error?.Message}"); } return null; }
获取Drive Item代码
var driveItem = await _graphClient .Drives[driveId] .Root .ItemWithPath(Path.GetFileName(filePath)).GetAsync().ConfigureAwait(false);
获取Drive ID代码
var siteId = await GetSiteId(url); var listDrive = await _graphClient .Sites[siteId] .Lists[listId] .Drive .GetAsync().ConfigureAwait(false)
获取Site ID代码
var site = await _graphClient .Sites[$"{domainName}:"] .Sites[siteName] .GetAsync().ConfigureAwait(false)
Graph Client初始化代码
private GraphServiceClient GetGraphClientService() { var scopes = new[] { "https://graph.microsoft.com/.default" }; var options = new TokenCredentialOptions { AuthorityHost = AzureAuthorityHosts.AzurePublicCloud, Retry = { Delay = TimeSpan.FromMinutes(40), MaxRetries = 3 } }; var clientSecretCredential = new ClientSecretCredential( _settings.SpTenantId, _settings.ClientId, _settings.Secret, options); return new GraphServiceClient(clientSecretCredential, scopes); }
内容的提问来源于stack exchange,提问作者Dayana Ismakova
相关产品推荐
相关产品推荐

