Iam无法从dot net代码中检索用户配置文件图片。我试着打印照片的高度。我得到了"未处理的异常。系统NullReferenceException:对象引用未设置为对象的实例">
Pfb程序.cs文件:
class Program
{
private static GraphServiceClient _graphClient;
static void Main(string[] args)
{
var config = LoadAppSetting();
if (config == null)
{
Console.Write("Invalid appsettings.json");
return;
}
var client = GetAuthenticatedGraphClient(config);
var graphRequest = client.Users.Request();
var results = graphRequest.GetAsync().Result;
foreach(var user in results)
{
//Console.Write(user.Id + ": " + user.DisplayName);
ProfilePhoto pro = user.Photo;
Console.Write(pro.Height);
/* DataServiceStreamResponse photo = user.ThumbnailPhoto.DownloadAsync();
using (MemoryStream s = new MemoryStream())
{
}*/
}
Console.WriteLine("nGraph Request:");
Console.WriteLine(graphRequest.GetHttpRequestMessage().RequestUri);
}
private static IConfigurationRoot LoadAppSetting()
{
try
{
var config = new ConfigurationBuilder()
.SetBasePath(System.IO.Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true)
.Build();
if (String.IsNullOrEmpty(config["applicationId"]) ||
String.IsNullOrEmpty(config["applicationSecret"]) ||
String.IsNullOrEmpty(config["redirectUri"]) ||
String.IsNullOrEmpty(config["tenantId"]))
{
return null;
}
return config;
}
catch(System.IO.FileNotFoundException)
{
return null;
}
}
private static IAuthenticationProvider CreateAuthorizationProvider(IConfigurationRoot config)
{
var clientId = config["applicationId"];
var clientSecret = config["applicationSecret"];
var redirectUri = config["redirectUri"];
var authority = $"https://login.microsoftonline.com/{config["tenantId"]}/v2.0";
List<string> scopes = new List<string>();
scopes.Add("https://graph.microsoft.com/.default");
//var cca = new ConfidentialClientApplication(clientId, authority, redirectUri, new ClientCredential(clientSecret), null, null);
var cca = ConfidentialClientApplicationBuilder.Create(clientId)
.WithAuthority(authority)
.WithRedirectUri(redirectUri)
.WithClientSecret(clientSecret)
.Build();
return new MsalAuthenticationProvider(cca, scopes.ToArray());
}
private static GraphServiceClient GetAuthenticatedGraphClient(IConfigurationRoot config)
{
var authenticationProvider = CreateAuthorizationProvider(config);
_graphClient = new GraphServiceClient(authenticationProvider);
return _graphClient;
}
}
}
Pfb用户和应用程序持有的权限的屏幕截图。
在此处输入图像描述
此外,我可以通过邮递员检索个人资料图片,但不能通过点网。Pfb来自邮递员的截图:
在此处输入图像描述
对于少数用户来说,个人资料照片没有更新(它为null(,你可以检查是否有个人资料为null?我建议您在图形浏览中进行检查。