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
相关产品推荐
相关产品推荐

