Xamarin Forms不使用GraphServiceClient操作Outlook ToDo任务及报错修复
问题原因
报错核心原因为:当前使用的GraphServiceClient默认配置为调用Microsoft Graph v1.0版本接口,但你调用的To Do任务相关路由在当前客户端版本/接口配置下,v1.0未匹配到对应路由,因此触发UnsupportedApiVersion错误。
报错解决方案
- 方案1:切换正式v1.0版本To Do接口(推荐,稳定无版本兼容问题)
当前Microsoft Graph v1.0已全量支持Outlook To Do任务的增删改查操作,无需使用beta版本。首先卸载项目中的Microsoft.Graph.BetaNuGet包,安装正式版Microsoft.Graph包,原有调用代码无需修改即可直接正常运行。 - 方案2:保留使用beta版本接口
保持安装Microsoft.Graph.BetaNuGet包,在初始化GraphServiceClient时显式指定beta版本端点即可:
注意beta版本接口可能存在非预期变更,不建议用于生产环境。// 初始化时指定beta版本端点 var graphClient = new GraphServiceClient( authenticationProvider, new[] { "https://graph.microsoft.com/beta/.default" } ); // 也可直接赋值BaseUrl graphClient.BaseUrl = "https://graph.microsoft.com/beta";
注意:两种方案都需要提前在Azure AD应用注册中配置
Tasks.ReadWrite(操作当前用户任务)或Tasks.ReadWrite.All(操作所有用户任务)权限,且完成用户授权,否则会触发权限拒绝错误。
无GraphServiceClient的替代方案
无需依赖GraphServiceClient封装库,直接使用HttpClient调用Microsoft Graph REST接口即可实现To Do任务的增删改查,示例如下:
// 1. 复用现有身份验证逻辑获取访问令牌 var accessToken = await AuthenticationHelper.GetAccessTokenAsync(); using var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); // 2. 构造更新任务的请求数据,仅需传入待修改字段 var updateData = new { Title = "更新后的任务标题", DueDateTime = new { DateTime = "2024-05-20T18:00:00", TimeZone = "China Standard Time" }, IsCompleted = false }; var jsonContent = JsonSerializer.Serialize(updateData); var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"); // 3. 发送PATCH请求更新任务,新增任务改为POST、删除改为DELETE即可 var response = await httpClient.PatchAsync( $"https://graph.microsoft.com/v1.0/me/todo/lists/{taskToDO.Id}/tasks/{task.Id}", content ); if (response.IsSuccessStatusCode) { // 更新成功,可读取返回的最新任务数据 var updatedTask = await response.Content.ReadAsStringAsync(); } else { // 处理错误逻辑 var errorMsg = await response.Content.ReadAsStringAsync(); }
内容的提问来源于stack exchange,提问作者Sharyu Ghatge
相关产品推荐
相关产品推荐

