.net - 上传用户照片 microsoft graph api 时出错
问题描述
我使用应用程序权限流进行身份验证,API 权限为 User.ReadWrite.All
我想使用存储在单独数据库中的图像更新/同步来自我们用户的个人资料图像。
出于调试目的,我从数据库中的“old-skool”窗口窗体图片框中检索图像。然后图像将使用以下代码传输到 office 365:
Dim pic = New MemoryStream
PictureBox1.Image.Save(pic, Imaging.ImageFormat.Jpeg)
Dim Photo = Await graphServiceClient.Users(TxtEmail.Text).Photo.Content.Request().PutAsync(pic)
这引发了一个异常:
Microsoft.Graph.ServiceException
HResult=0x80131500
Message=Code: ErrorItemNotFound
Message: The specified object was not found in the store., No photo with class 'IPM.UserPhoto.Preview' exists.
Inner error
Source=Microsoft.Graph.Core
StackTrace:
at Microsoft.Graph.HttpProvider.<SendAsync>d__18.MoveNext()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Graph.BaseRequest.<SendRequestAsync>d__34.MoveNext()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Graph.BaseRequest.<SendStreamRequestAsync>d__32.MoveNext()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at Firebird_Test_Photo.Form1.VB$StateMachine_5_BtnUpdateExchanhe_Click.MoveNext() in C:\Users\jodur.KREMER\source\repos\Firebird Test Photo\Firebird Test Photo\Form1.vb:line 125
下面用于将图像检索到图片框中的类似代码可以正常工作
Dim Photo = Await graphServiceClient.Users(TxtEmail.Text).Photo.Content.Request().GetAsync()
PictureBox2.Image = System.Drawing.Image.FromStream(Photo)
使用此函数检索的流更新照片也会导致相同的异常,因此我不怀疑流无效。
对这个问题有什么建议吗??也欢迎 C# 中的建议!
解决方案
$httpClient = [System.Net.Http.HttpClient]::new()
$httpClient.DefaultRequestHeaders.Authorization = [String]::Format('Bearer {0}', $accessToken)
$uri = [System.Uri]::new("https://graph.microsoft.com/v1.0/users/$($AzUserUPN)/photo/$value")
# Prepare Content
$content = [System.Net.Http.ByteArrayContent]::new([System.IO.File]::ReadAllBytes($AzUserImage));
$content.Headers.ContentType = "image/jpeg";
$task = $httpClient.PutAsync($uri,$content)
$task.Wait()
推荐阅读
- python - (Pandas) 正确的 lambda 表达式按值@索引位置 1 对列进行排序
- pine-script - 浮点数小于 1 的问题
- flutter - 如何在颤动中更改空字值?
- firebase - Flutter 和 Firebase 函数:TypeError:无法读取未定义的属性“令牌”
- python - 如何发出命令找出python3的路径?
- r - rmarkdown yaml 中的顺序或反应参数
- firebase - Flutter Firebase - 允许 null `request.auth.uid` 读取集合文档
- python - 在python中用逗号拆分列表,除非在python中被引号包围
- java - 证书策略 - 多个策略限定符信息
- ruby-on-rails - 如何在 RSpec/Capybara 测试中进行配置更改?