C# Microsoft Graph - allMailFolders 可能为 NULL?

问题描述 投票:0回答:1

出于某种原因,C# 认为该值可能为 null。即使使用 IF 语句表明它是否为 NULL,也表明它可能为 NULL。没有意义,这就是为什么我有一个 IF 语句。示例显示了没有 IF 语句的代码。

`
using Azure.Identity;
using Microsoft.Graph;
using Microsoft.Graph.Models;
using System;
using System.IO;`

`
var allMailFolders = await graphClient.Users["[email protected]"]
    .MailFolders["Inbox"]
    .Messages
    .GetAsync(x => {
    x.QueryParameters.Top = 1;
});

graphClient.Me.MailFolders.Request().GetAsync();
string junkEmailId = "";
foreach(MailFolder folder in allMailFolders){ //This is where it says it might be NULL
    if (folder.DisplayName == "Junk Email"){
    junkEmailId = folder.Id;
}`

我尝试过其他方法来获取这些邮件文件夹,但结果始终相同。

c# microsoft-graph-api
1个回答
0
投票

有一点看起来不太对劲的是

var allMailFolders = await graphClient.Users["[email protected]"]
.MailFolders["Inbox"]
.Messages
.GetAsync(x => {
x.QueryParameters.Top = 1;
});

您使用消息集合,但您的变量名称表明您想要收件箱的子文件夹?然后你就这么做了

foreach(MailFolder folder in allMailFolders){ 

所以在第一个块中你应该有

var allMailFolders = await graphClient.Users["[email protected]"]
.MailFolders["Inbox"]
.ChildFolders
.GetAsync(x => {
   x.QueryParameters.Top = 1;
 });

这将仅返回收件箱的子文件夹,因为您有 x.QueryParameters.Top = 1;它只会返回收件箱的第一个子文件夹,更好的方法是,如果您在收件箱的第一级子文件夹中确实有垃圾邮件文件夹,请对其进行过滤

MailFolders["Inbox"].ChildFolders.GetAsync(x => {
            x.QueryParameters.Filter = "displayName eq 'Junk Email'"; })

邮箱的标准垃圾邮件文件夹是一个众所周知的文件夹,因此使用 JunkEmail 枚举可以返回它,例如

MailFolders["JunkEmail"].

还有

graphClient.Me.MailFolders.Request().GetAsync();

这是 SDK v4 代码,其余代码是 v5(请求在 v5 中被删除)

图表不支持深层文件夹遍历,因此不会返回深度大于 1 的子文件夹,因此如果您需要邮箱中的所有文件夹,那么您必须进行多次浅层遍历或查看增量操作https: //learn.microsoft.com/en-us/graph/api/mailfolder-delta?view=graph-rest-1.0&tabs=http

© www.soinside.com 2019 - 2024. All rights reserved.