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

使用Microsoft Graph SDK C#创建订阅时遇必填字段报错问题

排查Microsoft Graph SDK创建订阅时"expirationDateTime是必填属性"报错

以下是具体排查步骤:

  • 检查Resource字段的合法性
    你使用的是Resource = "me/messages",但当前客户端是通过ClientSecretCredential以应用身份发起请求,me仅代表用户身份上下文的当前用户,应用身份下没有默认的"当前用户",所以这个Resource值无效。应该替换为具体用户的ID,比如users/{user-object-id}/messages,否则请求会存在上下文错误,可能导致错误信息不准确。

  • 验证expirationDateTime的序列化情况
    代码里虽然设置了ExpirationDateTime = DateTimeOffset.Now.AddMinutes(3500),但可以通过打印请求内容确认该字段是否被正确序列化:

    var webhookDataResult1 = graphClient.Subscriptions.ToPostRequestInformation(webhook);
    // 打印请求体内容
    var requestBody = System.Text.Json.JsonSerializer.Deserialize<dynamic>(webhookDataResult1.Content);
    Console.WriteLine(requestBody);
    

    如果输出的JSON里没有expirationDateTime字段,说明SDK没有正确序列化该属性,此时需要检查Microsoft.Graph NuGet包版本,更新到最新稳定版(避免旧版本的序列化bug)。

  • 确认订阅有效期是否符合要求
    Microsoft Graph针对不同资源类型的订阅有最大有效期限制,邮件订阅的应用权限场景下最大有效期为7天(10080分钟),你设置的3500分钟(约58小时)在范围内,但建议直接使用DateTimeOffset.UtcNow来生成时间(确保是UTC时间,Graph要求UTC格式):

    ExpirationDateTime = DateTimeOffset.UtcNow.AddMinutes(3500),
    
  • 检查应用权限配置
    确保你的应用已在Azure AD中授予Mail.ReadBasic.All或Mail.Read的应用权限,且已完成管理员同意。权限不足可能导致请求被拦截,返回的错误信息可能存在误导性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:50:03