You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:43:18