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

使用Microsoft Graph Client Library 5.0.0调用Outlook日历API时如何获取ODataError详情?

获取Microsoft Graph ODataError详细错误信息的方法

1. 精准捕获并解析ODataError异常

不要捕获通用Exception,直接针对ODataError类型捕获,该异常包含Graph API返回的结构化错误信息:

try
{
    // 你的日历数据获取代码
    var calendars = await graphClient.Me.Calendars.GetAsync();
}
catch (Microsoft.Graph.Models.ODataErrors.ODataError odataError)
{
    // 核心错误信息
    Console.WriteLine($"错误代码: {odataError.Error.Code}");
    Console.WriteLine($"错误描述: {odataError.Error.Message}");
    
    // 详细错误项(部分场景会返回更细的错误细节)
    if (odataError.Error.Details is not null)
    {
        foreach (var detail in odataError.Error.Details)
        {
            Console.WriteLine($"细节 - {detail.Name}: {detail.Value}");
        }
    }
    
    // 原始响应体(包含完整的JSON错误内容,便于排查)
    if (!string.IsNullOrEmpty(odataError.RawResponseBody))
    {
        Console.WriteLine($"原始错误响应: {odataError.RawResponseBody}");
    }
}

常见错误代码对应场景:

  • Authorization_RequestDenied:权限不足,需检查应用权限配置
  • ResourceNotFound:目标日历或用户不存在
  • InvalidQuery:查询参数格式错误

2. 启用Graph客户端的请求日志

通过自定义DelegatingHandler捕获完整的请求和响应,包括HTTP状态码和错误响应体:

// 创建带日志的HttpClient
var loggingHandler = new LoggingHandler(new HttpClientHandler());
var httpClient = new HttpClient(loggingHandler);

// 初始化Graph客户端
var graphClient = new GraphServiceClient(httpClient, /* 你的身份验证提供者实例 */);

// 自定义日志处理器
public class LoggingHandler : DelegatingHandler
{
    public LoggingHandler(HttpMessageHandler innerHandler) : base(innerHandler) { }

    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        // 输出请求信息
        Console.WriteLine($"请求: {request.Method} {request.RequestUri}");
        
        var response = await base.SendAsync(request, cancellationToken);
        
        // 输出响应状态码
        Console.WriteLine($"响应状态码: {response.StatusCode}");
        
        // 非成功状态时输出错误响应体
        if (!response.IsSuccessStatusCode)
        {
            var errorBody = await response.Content.ReadAsStringAsync();
            Console.WriteLine($"错误响应内容:\n{errorBody}");
        }
        
        return response;
    }
}

3. 验证权限与令牌有效性

如果错误指向权限问题:

  • 确认应用注册时已添加正确的日历权限(如Calendars.Read),且已完成同意流程(管理员同意适用于租户应用,用户同意适用于个人应用)
  • 解析当前访问令牌,查看scp(委托权限)或roles(应用权限)声明,确认包含所需权限范围

内容的提问来源于stack exchange,提问作者Tomasz Cz.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:12:53