Microsoft.Graph.ServiceException
HResult=0x80131500
Message=Code: generalException
Message: An error occurred sending the request.
内部例外 1:
ObjectDisposedException: Cannot access a disposed object.
ObjectDisposed_ObjectName_Name
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Graph;
namespace AuthenticationAzureADGetUserinfo.Pages
{
[Authorize]
public class ContentModel : PageModel
{
private readonly GraphServiceClient _graphServiceClient;
public string ID { get; set; }
public string Name { get; set; }
public string GivenName { get; set; }
public string Mail { get; set; }
public string Image { get; set; }
public ContentModel(GraphServiceClient graphServiceClient)
{
_graphServiceClient = graphServiceClient;
}
public async void OnGet()
{
User user = await _graphServiceClient.Me.Request().GetAsync();
ID = user.Id;
Name = user.DisplayName;
GivenName = user.GivenName;
Mail = user.Mail;
Stream s = await _graphServiceClient.Me.Photo.Content.Request().GetAsync();
byte[] photoByte = ((MemoryStream)s).ToArray();
Image = Convert.ToBase64String(photoByte);
}
}
}
(アプリケーションルート)/Content
URLのページを表示すると、
2回目のContent.Request().GetAsync()
の行で以下のエラーが発生します。.Request().GetAsync()
を .Request().GetAsync().Result
に変更し、await, async を利用しないコードにすると例外発生を回避できます。public void OnGet()
{
User user = _graphServiceClient.Me.Request().GetAsync().Result;
ID = user.Id;
Name = user.DisplayName;
GivenName = user.GivenName;
Mail = user.Mail;
Stream s = _graphServiceClient.Me.Photo.Content.Request().GetAsync().Result;
byte[] photoByte = ((MemoryStream)s).ToArray();
Image = Convert.ToBase64String(photoByte);
}