使用Microsoft Graph 2.0.14在收件箱创建文件夹遇请求错误
问题分析
你遇到的ErrorInvalidRequest是因为调用API的方式错误:_journalMailbox.MailFolders.Inbox.Request().CreateAsync()是尝试创建一个新的收件箱文件夹,而Office 365邮箱的收件箱是系统默认文件夹,不允许重复创建,且该接口本身不支持对默认收件箱执行Create操作。你需要的是在收件箱下创建子文件夹,应该调用收件箱的ChildFolders集合的Create方法。
解决方案
将创建文件夹的代码替换为针对ChildFolders的Create请求,同时可以优化原有的子文件夹检查逻辑。
修正后的核心代码
if (!dbErrorFolder) { try { // 正确调用:在收件箱的ChildFolders下创建子文件夹 var folder = _journalMailbox.MailFolders.Inbox.ChildFolders.Request().CreateAsync( new MailFolder() { DisplayName = "DB-Error_Items", }).GetAwaiter().GetResult(); } catch (Exception ex) { throw; } }
优化后的文件夹检查逻辑(可选)
原有的循环判断可以用LINQ简化,更简洁高效:
var existingFolders = inbox.ChildFolders?.Select(f => f.DisplayName.ToLower()) ?? new List<string>(); dbErrorFolder = existingFolders.Contains("db-error-items"); exchangeErrorFolder = existingFolders.Contains("exchange-error-items");
权限确认
确保你的应用注册已经添加了应用权限Mail.ReadWrite(因为你使用的是客户端凭证流,需要应用权限而非委托权限),并且已经完成管理员同意。
内容的提问来源于stack exchange,提问作者hannodb
相关产品推荐
相关产品推荐

