尝试下载用户映像时出现Microsoft.Graph.ServiceException

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试下载用户映像时出现Microsoft.Graph.ServiceException相关的知识,希望对你有一定的参考价值。

我有一个非常令人沮丧的问题,我想要做的就是从O365获取用户图像,并将其显示在我的网页上,该网页托管在Azure azpp服务上。

正如您从this SOthis SharePoint.StackExchange问题中看到的那样,当只是尝试在<img>标记中显示从SharePoint获取的链接时,图像无法加载。

但是,在新选项卡中导航到图像并刷新我的页面后,iamges加载正常。有谁能解释这种行为?对我来说根本没有意义

无论如何,因为那个因为任何原因而无法工作(登录用户显然拥有正确的权限,因为图像在导航到它们之后显得很糟糕),我想我会尝试使用图形API下载图像。

所以我下载了quick start project并尝试下载图像

public async Task<Stream> TestAsync(GraphServiceClient graphClient)
{
    var users = graphClient.Users;
    var jk = users["user.name@domain.com"];

    return await jk.Photo.Content.Request().GetAsync();
}

但我得到了

抛出了类型'Microsoft.Graph.ServiceException'的异常。

然而,当我尝试在API图形资源管理器中查看相同的图像时,我可以下载图像。有人可以帮助我在我的网页中显示SharePoint用户图像,而无需用户首先直接导航到图像。为什么一定要这么难?

答案

获得有效令牌后,请确保您的权限范围包括User.Read.All,例如:

enter image description here

查询:

var user = graphClient.Users["<userPrincipalName>"];

对应于以下端点

Url: /users/{userPrincipalName}
Method: GET

这需要User.Read.All范围,请参阅permission section了解更多详情。

此外,如果access without a user令牌需要Administrative Consent才可以使用。

var users = graphClient.Users;
var user = users[accountName];
var photo = await user.Photo.Content.Request().GetAsync() as MemoryStream;
using (var file = new FileStream("./user.jpg", FileMode.Create, FileAccess.Write))
{
     if (photo != null) photo.WriteTo(file);
}

以上是关于尝试下载用户映像时出现Microsoft.Graph.ServiceException的主要内容,如果未能解决你的问题,请参考以下文章

使用 rust 二进制文件运行 docker 映像时出现权限被拒绝错误

HP笔记本换系统时出现:选择的启动映像是尚未被验证过的。请问如何解

应用程序构建成功但出现错误:运行映像时出现“没有主清单属性,在 app.jar 中”

构建 docker 映像时出现问题,运行 dotnet restore:VS2019 中的“No such host is known”,Windows

AWS ECS Blue/Green CodePipeline:尝试读取图像工件时出现异常

尝试使用“下载”属性以 HTML5 提供下载时出现“失败 - 网络错误”