通过Graph API上传用户头像遇UnknownError,求助排查及权限确认
使用Graph API上传用户头像报错UnknownError的问题排查
问题详情
我正尝试通过Graph API上传本地图片作为用户头像,代码如下:
string filename = "S:\\28-sept\\leo.jpg"; byte[] bytes = File.ReadAllBytes(filename); // GetHttpRequest 返回已设置Bearer token的HttpRequestMessage // 确认graphAccessToken已正确配置 var req = GetHttpRequest(HttpMethod.Put, "https://graph.microsoft.com/v1.0/users/fe7b8732-ca7b-4cc7-b524-4093fc13dfd3e/photo/$value", logger); ByteArrayContent streamContent = new ByteArrayContent(bytes); streamContent.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); req.Content = streamContent; var client = new HttpClient(); HttpResponseMessage response = client.SendAsync(req).Result; string strResp = response.Content.ReadAsStringAsync().Result;
返回错误信息:
{ "error": { "code":"**UnknownError**", "message": "", "innerError": { "date":"2024-01-25T16:42:32", "request-id":"{{Some-GUID}}", "client-request-id":"{{Some-GUID}}" } } }
当前应用已配置User.Read.All和User.ReadBasic.All权限,想知道问题原因,是否需要授予User.ReadWrite.All应用权限?
排查及解决建议
- 权限缺失是核心问题:上传用户头像属于修改用户资源操作,
User.Read.All和User.ReadBasic.All都是只读权限,没有修改权限。必须授予User.ReadWrite.All应用权限,并且要完成管理员同意流程,否则无法执行修改操作。 - 检查用户ID正确性:请求URL中的用户ID
fe7b8732-ca7b-4cc7-b524-4093fc13dfd3e末尾多了一个e,正常GUID格式为32位字符加4个连字符,这个ID长度不符合规范,这大概率是导致UnknownError的直接原因,修正为正确的用户ID再测试。 - 验证图片合规性:Graph API对用户头像有明确限制:必须是JPEG格式,文件大小不超过4MB,尺寸建议至少96x96像素,确认你的图片满足这些要求。
- 优化请求调用方式:代码中使用
.Result同步调用HttpClient,容易引发死锁或异常丢失,建议改用async/await异步模式,便于捕获更详细的异常信息。
内容的提问来源于stack exchange,提问作者punjabi
相关产品推荐
相关产品推荐

