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

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.Beta NuGet包,安装正式版Microsoft.Graph包,原有调用代码无需修改即可直接正常运行。
  • 方案2:保留使用beta版本接口
    保持安装Microsoft.Graph.Beta NuGet包,在初始化GraphServiceClient时显式指定beta版本端点即可:
    // 初始化时指定beta版本端点
    var graphClient = new GraphServiceClient(
        authenticationProvider,
        new[] { "https://graph.microsoft.com/beta/.default" }
    );
    // 也可直接赋值BaseUrl
    graphClient.BaseUrl = "https://graph.microsoft.com/beta";
    
    注意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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:06:03