【问题标题】:Microsoft.Graph.ServiceException when trying to download user image尝试下载用户图像时出现 Microsoft.Graph.ServiceException
【发布时间】:2018-03-04 04:26:16
【问题描述】:

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

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

但是,在新标签中导航到图像并刷新我的页面后,图像加载正常。 谁能解释这种行为?这对我来说毫无意义

无论如何,因为无论出于何种原因,它都不起作用(登录用户显然具有正确的权限,因为图像在导航到它们后确实会显示), 我想我会尝试使用图形 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 用户图像,而无需用户先直接导航到图像。为什么这么难?

【问题讨论】:

  • 如果你catch这个异常和ToString它,结果是什么?
  • 我收到了"Code: ErrorAccessDenied\r\nMessage: Access is denied. Check credentials and try again.\r\n\r\nInner error\r\n",即使我通过微软登录手动确认了我的帐户......这没有任何意义。我实际上并不想使用这种方法,因为无论如何都有额外的身份验证步骤 - 我只是不明白为什么这这么难

标签: c# sharepoint azure-ad-graph-api


【解决方案1】:

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

查询:

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);
}

【讨论】:

  • 感谢您的回复瓦迪姆。现在我收到{Code: AuthenticationFailureMessage: Caller needs to authenticate.}... 为什么需要这么复杂
猜你喜欢
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多