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

Microsoft Graph Api 5.54.0模拟响应返回null问题求助

解决Microsoft Graph客户端Mock响应返回null的问题

你的问题出在Mock响应的格式不符合Microsoft Graph客户端的解析要求,导致客户端无法正确反序列化JSON数据,最终返回null。具体有两个关键点需要修正:

1. 缺少正确的Content-Type响应头

Microsoft Graph客户端仅会解析Content-Type为application/json的响应内容。你的Mock响应没有设置这个头,客户端无法识别内容格式,所以无法解析。

2. JSON序列化格式不匹配Graph的命名规则

Graph API返回的JSON使用驼峰命名(比如inviteRedeemUrl而不是InviteRedeemUrl),默认的JsonSerializer序列化会使用PascalCase,导致客户端无法映射到Invitation类的属性。

修改后的Mock配置代码

protected string? ConfigureInvitationsMock()
{
    var invitationUrl = $"https://test.com/invitation/{Guid.NewGuid()}";

    var invitation = new Invitation()
    {
        Id = Guid.NewGuid().ToString(),
        InviteRedeemUrl = invitationUrl
    };

    // 使用驼峰命名策略序列化,匹配Graph API格式
    var jsonOptions = new JsonSerializerOptions
    {
        PropertyNamingPolicy = JsonNamingPolicy.CamelCase
    };
    var jsonContent = JsonSerializer.Serialize(invitation, jsonOptions);

    // 创建带正确Content-Type的StringContent
    var responseContent = new StringContent(jsonContent, Encoding.UTF8, "application/json");

    _messageHandlerMock.Protected()
        .Setup<Task<HttpResponseMessage>>("SendAsync",
            ItExpr.Is<HttpRequestMessage>(x => x.Method == HttpMethod.Post
                                       && x.RequestUri.AbsoluteUri.StartsWith(_invitationsApiUrl)),
            ItExpr.IsAny<CancellationToken>())
        .ReturnsAsync(new HttpResponseMessage
        {
            StatusCode = HttpStatusCode.OK,
            Content = responseContent
        });

    return invitationUrl;
}

验证修改效果

  • 修正后,Graph客户端能正确识别响应格式并反序列化Invitation对象,result.ShouldNotBeNull()会通过。
  • 你之前的测试已经验证了Mock能拦截请求、状态码修改会触发异常,所以修正响应格式后即可解决返回null的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:33:24