Graph API报错:Content type text/html无解析工厂注册,请求协助解决
解决“Content type text/html does not have a factory registered to be parsed”错误
这个错误的核心原因是Microsoft Graph API返回了HTML格式的错误页面(而非SDK预期的JSON响应),导致SDK无法解析内容。以下是针对性的修复步骤:
1. 填充有效的用户ID
代码中by_user_id("")传入了空字符串,这会导致请求无效并返回错误页面。必须替换为目标用户的**用户主体名称(UPN,如user@yourdomain.com)**或Azure AD用户ID。
2. 检查应用权限配置
使用ClientSecretCredential时,Azure AD应用需要配置应用权限(而非委派权限),且需完成管理员同意:
- 登录Azure门户,找到你的应用注册
- 进入“API权限”,添加
Microsoft Graph的应用权限,如Mail.Read或Mail.ReadBasic - 点击“授予管理员同意”,确保权限生效
3. 验证认证有效性
先单独测试凭证是否能获取有效令牌,排除认证问题:
from azure.identity import ClientSecretCredential tenant_id = "你的租户ID" client_id = "你的客户端ID" client_secret = "你的客户端密钥" credential = ClientSecretCredential(tenant_id, client_id, client_secret) token = credential.get_token("https://graph.microsoft.com/.default") print("获取到的令牌:", token.token)
如果令牌获取失败,检查tenant_id、client_id、client_secret是否正确,以及应用是否在对应租户中注册。
4. 捕获异常查看具体错误信息
添加异常捕获逻辑,打印原始响应内容,明确错误原因:
from kiota_abstractions.api_error import APIError import asyncio async def get_user(): try: result = await client.users.by_user_id("user@yourdomain.com").messages.get(request_configuration=request_configuration) print(result) except APIError as e: print(f"API错误信息: {e.error.message}") print(f"响应状态码: {e.response.status_code}") print("原始响应内容:", await e.response.text()) except Exception as e: print(f"意外错误: {str(e)}") asyncio.run(get_user())
通过原始HTML内容可以直接看到具体错误(如权限不足、用户不存在等),进一步定位问题。
内容的提问来源于stack exchange,提问作者Lokeshwar V
相关产品推荐
相关产品推荐

