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

如何使用MS Graph API在指定归档路径下创建子文件夹(C#)

在Online Archive指定父文件夹下创建子文件夹(C# + MS Graph API)

核心逻辑

要在Online Archive/Inbox/TestParentFolder/路径下创建子文件夹,关键是先定位到TestParentFolder的ID,再向该文件夹的childFolders端点发送创建请求——Online Archive的层级操作和普通邮件文件夹完全一致,只是起始定位点是系统预设的archive文件夹。

实现步骤

  1. 逐层定位父文件夹
    • Online Archive对应MS Graph中用户的预设文件夹archive,可直接用"archive"作为ID访问;
    • 从archive下找到Inbox子文件夹,再从Inbox下找到TestParentFolder;
  2. 创建子文件夹
    拿到父文件夹ID后,调用ChildFolders.PostAsync()方法,逻辑和你在根目录创建文件夹一致,只是请求路径指向父文件夹的子文件夹集合。

完整代码示例

using Microsoft.Graph.Models;
using System.Linq;

public async Task<Models.Folder> CreateArchiveSubFolderAsync(string mailbox, string parentFolderPath, string folderName)
{
    // 拆分路径并移除空项
    var pathSegments = parentFolderPath.Split('/', StringSplitOptions.RemoveEmptyEntries);
    
    // 起始节点:Online Archive对应的系统预设文件夹"archive"
    var currentFolderClient = _graphServiceClient.Users[mailbox].MailFolders["archive"];
    
    // 遍历路径层级,逐层定位目标父文件夹
    foreach (var folderNameSegment in pathSegments.Skip(1)) // 跳过第一个"Online Archive",已定位到archive文件夹
    {
        var childFolders = await currentFolderClient.ChildFolders.GetAsync();
        var targetFolder = childFolders.FirstOrDefault(f => 
            f.DisplayName.Equals(folderNameSegment, StringComparison.OrdinalIgnoreCase));
        
        if (targetFolder == null)
        {
            throw new InvalidOperationException($"路径中未找到文件夹:{folderNameSegment}");
        }
        
        currentFolderClient = _graphServiceClient.Users[mailbox].MailFolders[targetFolder.Id];
    }
    
    // 构造新文件夹请求体
    var newFolderBody = new MailFolder
    {
        DisplayName = folderName,
        IsHidden = false
    };
    
    // 在目标父文件夹下创建子文件夹
    var createdFolder = await currentFolderClient.ChildFolders.PostAsync(newFolderBody);
    
    return new Models.Folder
    {
        Id = createdFolder.Id
    };
}

调用示例

// 在Online Archive/Inbox/TestParentFolder下创建名为"NewSubFolder"的子文件夹
var resultFolder = await CreateArchiveSubFolderAsync(
    mailbox: "user@domain.com",
    parentFolderPath: "Online Archive/Inbox/TestParentFolder/",
    folderName: "NewSubFolder"
);

注意事项

  • 确保你的Graph应用已配置Mail.ReadWrite权限(应用权限或委派权限均可,根据场景选择);
  • 若路径固定且频繁使用,建议缓存父文件夹ID,避免每次逐层查询,提升性能;
  • 路径匹配默认忽略大小写,如需严格匹配可移除StringComparison.OrdinalIgnoreCase参数。

内容的提问来源于stack exchange,提问作者Qiuzman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:55:05