寻找Microsoft.ExchangeService(EWS)在Graph SDK for .NET中的对应调用
EWS方法对应Microsoft Graph的C#/.NET Core调用
1. ExchangeService.GetRooms()
对应Microsoft Graph中获取组织内会议室资源的接口,使用Graph SDK可通过Places端点获取所有会议室:
using Microsoft.Graph; using Microsoft.Graph.Models; using Azure.Identity; // 初始化Graph客户端 var scopes = new[] { "https://graph.microsoft.com/.default" }; var clientId = "你的客户端ID"; var tenantId = "你的租户ID"; var clientSecret = "你的客户端密钥"; var clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret); var graphClient = new GraphServiceClient(clientSecretCredential, scopes); // 获取所有会议室 var rooms = await graphClient.Places.GraphRoom.Request().GetAsync(); foreach (var room in rooms) { Console.WriteLine($"会议室名称: {room.DisplayName}, 邮箱: {room.EmailAddress}"); }
2. ExchangeService.ResolveNames()
该方法用于解析模糊名称到用户、联系人或会议室,对应Microsoft Graph的People.Search接口,支持多类型实体匹配:
// 构建搜索请求,匹配目标名称 var searchRequest = new SearchRequest { Query = new SearchQuery { QueryString = "目标名称" }, EntityTypes = new List<EntityType?> { EntityType.Person, EntityType.Room } }; // 执行搜索 var searchResults = await graphClient.People.Search(searchRequest).Request().GetAsync(); foreach (var result in searchResults.Value) { if (result is Person person) { Console.WriteLine($"用户: {person.DisplayName}, 邮箱: {person.EmailAddresses?.FirstOrDefault()?.Address}"); } else if (result is Room room) { Console.WriteLine($"会议室: {room.DisplayName}, 邮箱: {room.EmailAddress}"); } }
若仅需匹配组织内用户,可直接查询Users端点:
var users = await graphClient.Users.Request() .Filter("startswith(displayName,'目标名称') or startswith(mail,'目标名称')") .GetAsync();
3. ExchangeService.FindAppointments()
对应Microsoft Graph中查询日历事件的接口,可通过Me.Calendar.Events(当前用户)或Users/{userId}/Calendar.Events指定用户的日历获取预约:
// 定义时间范围 var startDateTime = new DateTimeOffset(2024, 1, 1, 0, 0, 0, TimeSpan.Zero); var endDateTime = new DateTimeOffset(2024, 1, 7, 23, 59, 59, TimeSpan.Zero); // 查询该时间范围内的所有预约 var appointments = await graphClient.Me.Calendar.Events.Request() .Filter($"start/dateTime ge '{startDateTime.ToString("o")}' and end/dateTime le '{endDateTime.ToString("o")}'") .Select("subject,start,end,location") .OrderBy("start/dateTime") .GetAsync(); foreach (var appt in appointments) { Console.WriteLine($"主题: {appt.Subject}, 开始时间: {appt.Start?.DateTime}, 地点: {appt.Location?.DisplayName}"); }
注意事项
- 需提前安装
Microsoft.Graph和Azure.IdentityNuGet包 - 可根据实际认证场景选择对应Credential(如用户交互场景使用
InteractiveBrowserCredential)
内容的提问来源于stack exchange,提问作者Nilanjan Saha
相关产品推荐
相关产品推荐

