调用Microsoft Graph获取Contacts时遇异常:Content type text/html无解析工厂
解决Microsoft Graph获取Contacts时的"Content type text/html does not have a factory registered to be parsed"异常
这个错误的核心原因是Graph请求返回了HTML内容(而非预期的JSON响应),SDK无法解析HTML格式导致失败。常见场景包括认证失败返回登录页面、权限不足返回错误页面,或者请求被拦截重定向到HTML页面。
排查和解决步骤:
验证认证有效性
确认requestAdapter使用的访问令牌具备Contacts.Read权限,且未过期。可以将令牌复制到jwt.ms解析,检查scp字段是否包含Contacts.Read,以及exp字段的过期时间。捕获原始响应内容
添加异常捕获,查看实际返回的HTML内容,定位具体错误:try { var result = await graphClient.Me.Contacts.GetAsync(); } catch (Exception ex) { if (ex is HttpRequestException httpEx && httpEx.Data.Contains("Response")) { var response = httpEx.Data["Response"] as HttpResponseMessage; if (response != null) { var rawContent = await response.Content.ReadAsStringAsync(); Console.WriteLine("原始响应内容:\n" + rawContent); } } // 同时捕获OData标准错误 else if (ex is ODataError odataError) { Console.WriteLine("OData错误:" + odataError.Error.Message); } }检查权限配置
确认应用注册中已添加Contacts.Read的委派权限,并且:- 如果是用户授权场景,确保用户已完成授权流程;
- 如果是应用权限场景,已获取管理员同意,且使用的是应用令牌而非用户令牌。
确认请求端点正确性
检查graphClient是否指向正确的Graph API端点(默认是https://graph.microsoft.com/v1.0),避免因环境配置错误导致请求到错误地址返回HTML。
内容的提问来源于stack exchange,提问作者Dzmitriy Salodki
相关产品推荐
相关产品推荐

