使用Graph API和C#下载SharePoint文件的技术咨询
一、能否通过路径直接查询并下载文件?
可以直接通过Microsoft Graph API使用文件路径定位并下载,无需多次调用获取资源ID。具体请求端点格式如下:
GET https://graph.microsoft.com/v1.0/sites/my-host.sharepoint.com:/sites/ActiveSite/drive/root:/DocumentLibrary/ParentFolder/ImmediateFolder/Panda.jpg:/content
请求时在Header中携带你的Azure AD AccessToken,即可直接获取文件二进制内容完成下载。
二、PnP.Framework如何使用Azure AD应用注册调用SharePoint?
PnP.Framework支持Azure AD应用注册的客户端凭证流认证,并非只能依赖SharePoint内创建的ACS应用。你可以使用AuthenticationManager.GetAzureADAppOnlyAuthenticatedContext方法替代文档中的ACS方法,示例代码如下:
using PnP.Framework; var siteUrl = "https://my-host.sharepoint.com/sites/ActiveSite"; var tenantId = "你的Azure AD租户ID"; var clientId = "你的Azure AD应用客户端ID"; var clientSecret = "你的Azure AD应用客户端密钥"; using var context = new AuthenticationManager().GetAzureADAppOnlyAuthenticatedContext( siteUrl, tenantId, clientId, clientSecret); // 下载文件示例 context.Web.GetFileByServerRelativeUrl("/sites/ActiveSite/DocumentLibrary/ParentFolder/ImmediateFolder/Panda.jpg") .SaveAs("本地保存路径/Panda.jpg");
注意需确保Azure AD应用已授予对应的SharePoint权限(如Sites.Read.All)。
三、若必须使用ID查询,如何获取并保存资源ID?
如果需要获取站点、文档库、文件夹或文件的ID,可通过以下步骤调用Microsoft Graph API获取:
获取站点ID
GET https://graph.microsoft.com/v1.0/sites/my-host.sharepoint.com:/sites/ActiveSite响应中的
id字段即为站点ID。获取文档库ID
使用站点ID调用:GET https://graph.microsoft.com/v1.0/sites/{站点ID}/drives在响应列表中找到名称为
DocumentLibrary的项,其id字段即为文档库ID。获取文件夹ID
使用站点ID调用:GET https://graph.microsoft.com/v1.0/sites/{站点ID}/drive/root:/DocumentLibrary/ParentFolder/ImmediateFolder响应中的
id字段即为文件夹ID。获取文件ID
使用站点ID调用:GET https://graph.microsoft.com/v1.0/sites/{站点ID}/drive/root:/DocumentLibrary/ParentFolder/ImmediateFolder/Panda.jpg响应中的
id字段即为文件ID。
获取到这些ID后,可将其保存到应用配置文件(如.NET中的appsettings.json),后续直接从配置中读取ID进行API调用。
内容的提问来源于stack exchange,提问作者imran chowdhury
相关产品推荐
相关产品推荐

