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

如何在C#中操作单值扩展属性以实现MS Graph投票集成?

在C#中操作Microsoft Graph单值扩展属性的实现方案

针对你需要实现投票功能的场景,确实可以用SingleValueLegacyExtendedProperty类来操作单值扩展属性,这个类是Microsoft Graph .NET SDK的原生类,属于Microsoft.Graph.Models命名空间,下面是具体的操作示例:

1. 创建单值扩展属性(以邮件为例)

将投票选项作为扩展属性附加到邮件中,代码示例:

using Microsoft.Graph;
using Microsoft.Graph.Models;
using Azure.Identity;

// 初始化Graph客户端(使用客户端凭证模式,可根据你的认证方式调整)
var tenantId = "你的租户ID";
var clientId = "你的应用ID";
var clientSecret = "你的应用密钥";
var graphClient = new GraphServiceClient(new ClientSecretCredential(tenantId, clientId, clientSecret));

// 定义投票选项的单值扩展属性
var votingProperty = new SingleValueLegacyExtendedProperty
{
    // ID格式:String {实体类型GUID} Name 属性名,邮件对应的GUID是{00020329-0000-0000-C000-000000000046}
    Id = "String {00020329-0000-0000-C000-000000000046} Name VotingOptions",
    Value = "同意;不同意;待定"
};

// 创建带扩展属性的邮件
var voteMessage = new Message
{
    Subject = "项目立项投票",
    Body = new ItemBody { Content = "请选择你的投票选项", ContentType = BodyType.Text },
    SingleValueExtendedProperties = new List<SingleValueLegacyExtendedProperty> { votingProperty },
    // 添加收件人信息
    ToRecipients = new List<Recipient>
    {
        new Recipient { EmailAddress = new EmailAddress { Address = "user@example.com" } }
    }
};

// 发送邮件并保存到已发送
await graphClient.Me.SendMail.PostAsync(new SendMailPostRequestBody
{
    Message = voteMessage,
    SaveToSentItems = true
});

2. 读取邮件中的单值扩展属性

获取邮件时通过Expand包含扩展属性:

// 查询包含投票属性的邮件
var messages = await graphClient.Me.Messages
    .Request()
    .Expand("singleValueExtendedProperties($filter=id eq 'String {00020329-0000-0000-C000-000000000046} Name VotingOptions')")
    .GetAsync();

foreach (var msg in messages)
{
    var votingOptionProp = msg.SingleValueExtendedProperties?.FirstOrDefault(p => p.Id.Contains("VotingOptions"));
    if (votingOptionProp != null)
    {
        Console.WriteLine($"当前投票选项:{votingOptionProp.Value}");
    }
}

3. 更新单值扩展属性

修改已存在的扩展属性值:

var messageId = "目标邮件的ID";
var targetMessage = await graphClient.Me.Messages[messageId].GetAsync();

// 更新投票选项
var updatedVotingProp = new SingleValueLegacyExtendedProperty
{
    Id = "String {00020329-0000-0000-C000-000000000046} Name VotingOptions",
    Value = "同意;不同意;待定;弃权"
};

targetMessage.SingleValueExtendedProperties = new List<SingleValueLegacyExtendedProperty> { updatedVotingProp };

await graphClient.Me.Messages[messageId].PatchAsync(targetMessage);

4. 删除单值扩展属性

将扩展属性列表设为空即可移除:

var messageId = "目标邮件的ID";
var targetMessage = await graphClient.Me.Messages[messageId].GetAsync();

targetMessage.SingleValueExtendedProperties = new List<SingleValueLegacyExtendedProperty>();

await graphClient.Me.Messages[messageId].PatchAsync(targetMessage);

注意事项

  • 扩展属性的ID格式必须严格遵循String {实体GUID} Name 属性名,不同实体(如邮件、事件)对应不同的GUID,可参考Graph官方定义的实体类型GUID
  • 确保你的应用已申请对应的Microsoft Graph权限,比如邮件场景需要Mail.ReadWrite权限
  • 如果需要避免属性名冲突,也可以使用GUID形式的属性ID,格式为String {GUID} Id {自定义GUID}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:05:33