无需创建Cookie和登录浏览器,用C#下载SharePoint文件
方法1:SharePoint CSOM + App-Only权限
这种方式通过注册SharePoint应用获取权限,全程无需用户交互登录。
前置操作:
- 登录目标SharePoint站点,访问
/_layouts/15/appregnew.aspx页面注册应用,记录生成的客户端ID和客户端密钥。 - 访问
/_layouts/15/appinv.aspx页面,输入客户端ID,提交权限XML授予应用读取文件的权限(示例权限XML:<AppPermissionRequests AllowAppOnlyPolicy="true"><AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="Read" /></AppPermissionRequests>)。
C#代码示例:
using Microsoft.SharePoint.Client; using System.IO; using System.Security; class Program { static void Main() { string siteUrl = "https://yourtenant.sharepoint.com/sites/yoursite"; string clientId = "你的客户端ID"; string clientSecret = "你的客户端密钥"; using (var context = new ClientContext(siteUrl)) { context.AuthenticationMode = ClientAuthenticationMode.Default; context.FormDigestHandlingEnabled = false; context.Credentials = new SharePointOnlineCredentials(clientId, ConvertToSecureString(clientSecret)); // 获取目标文件 var file = context.Web.GetFileByServerRelativeUrl("/sites/yoursite/Shared%20Documents/target-file.pdf"); context.Load(file); context.ExecuteQuery(); // 保存到本地 using (var localStream = new FileStream(@"C:\Downloads\target-file.pdf", FileMode.Create)) { file.OpenBinaryStream().Value.CopyTo(localStream); } } } private static SecureString ConvertToSecureString(string input) { var secureString = new SecureString(); foreach (char c in input) { secureString.AppendChar(c); } return secureString; } }
需提前安装NuGet包:Microsoft.SharePointOnline.CSOM
方法2:Microsoft Graph API + 客户端凭据流
通过Azure AD注册应用,使用客户端凭据模式完成无交互认证,调用Graph API下载文件。
前置操作:
- 登录Azure门户,注册新应用程序,记录客户端ID、客户端密钥和租户ID。
- 为应用添加应用权限(如
Files.Read.All或Sites.Read.All),并获取管理员同意。
C#代码示例:
using Microsoft.Graph; using Microsoft.Identity.Client; using System.IO; class Program { static async Task Main() { string tenantId = "你的租户ID"; string clientId = "你的客户端ID"; string clientSecret = "你的客户端密钥"; string siteId = "目标站点ID"; string driveId = "文档库ID"; string fileId = "目标文件ID"; var confidentialClient = ConfidentialClientApplicationBuilder .Create(clientId) .WithTenantId(tenantId) .WithClientSecret(clientSecret) .Build(); var authProvider = new ClientCredentialProvider(confidentialClient); var graphClient = new GraphServiceClient(authProvider); // 下载文件流并保存 using (var remoteStream = await graphClient.Sites[siteId].Drives[driveId].Items[fileId].Content.Request().GetAsync()) { using (var localStream = new FileStream(@"C:\Downloads\target-file.pdf", FileMode.Create)) { await remoteStream.CopyToAsync(localStream); } } } }
需提前安装NuGet包:Microsoft.Graph、Microsoft.Identity.Client
方法3:NTLM认证(仅限内部部署SharePoint)
如果是本地SharePoint Farm环境,可直接使用域账号凭据完成NTLM认证:
using Microsoft.SharePoint.Client; using System.IO; using System.Net; class Program { static void Main() { string siteUrl = "http://local-sharepoint/sites/yoursite"; string username = "DOMAIN\\your-account"; string password = "your-password"; using (var context = new ClientContext(siteUrl)) { context.Credentials = new NetworkCredential(username, password); var file = context.Web.GetFileByServerRelativeUrl("/sites/yoursite/Shared Documents/target-file.pdf"); context.Load(file); context.ExecuteQuery(); using (var localStream = new FileStream(@"C:\Downloads\target-file.pdf", FileMode.Create)) { file.OpenBinaryStream().Value.CopyTo(localStream); } } } }
内容的提问来源于stack exchange,提问作者Darshit Gandhi
相关产品推荐
相关产品推荐

