You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core 8 MVC中使用Graph API获取用户头像

如何在ASP.NET Core 8 MVC中使用Graph API获取用户头像

嗨,我来帮你一步步搞定这个需求!你已经完成了Azure AD认证的配置,接下来只需要几个简单步骤就能集成Graph API获取并显示用户的头像了:

1. 安装必要的NuGet包

首先得装上Graph API和身份验证相关的包,打开项目终端,运行这两个命令:

dotnet add package Microsoft.Graph
dotnet add package Microsoft.Identity.Web

2. 配置应用设置(appsettings.json)

在你的appsettings.json里,除了已有的Azure AD配置,还要添加Graph API的权限范围:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "your-domain.onmicrosoft.com",
    "TenantId": "your-tenant-id",
    "ClientId": "your-client-id",
    "ClientSecret": "your-client-secret",
    "CallbackPath": "/signin-oidc"
  },
  "GraphScopes": "User.Read"
}

注意:这里的GraphScopes用User.Read就足够获取用户头像了,如果需要其他权限可以追加。

3. 在Program.cs中注册Graph服务

把Graph服务注入到依赖容器里,让我们的控制器能调用它。修改Program.cs的认证配置部分:

using Microsoft.Identity.Web;
using Microsoft.Identity.Web.UI;

var builder = WebApplication.CreateBuilder(args);

// 添加Azure AD认证并集成Graph API
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
    .AddMicrosoftGraph(options =>
    {
        options.Scopes = string.Join(" ", builder.Configuration["GraphScopes"].Split(' '));
    })
    .AddInMemoryTokenCaches();

// 添加MVC和身份验证UI支持
builder.Services.AddControllersWithViews()
    .AddMicrosoftIdentityUI();

var app = builder.Build();

// 中间件配置(保持你原有的配置即可)
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

4. 在控制器中调用Graph API获取头像

比如在你的HomeController里,注入GraphServiceClient,然后编写获取头像的逻辑:

using Microsoft.Graph;
using Microsoft.AspNetCore.Authorization;
using System.IO;

public class HomeController : Controller
{
    private readonly GraphServiceClient _graphServiceClient;

    // 构造函数注入Graph服务
    public HomeController(GraphServiceClient graphServiceClient)
    {
        _graphServiceClient = graphServiceClient;
    }

    [Authorize] // 确保只有认证用户能访问这个Action
    public async Task<IActionResult> Index()
    {
        try
        {
            // 获取当前用户的头像流
            var photoStream = await _graphServiceClient.Me.Photo.Content.Request().GetAsync();
            
            // 把流转成Base64格式,方便在视图中显示
            var memoryStream = new MemoryStream();
            await photoStream.CopyToAsync(memoryStream);
            var base64Photo = Convert.ToBase64String(memoryStream.ToArray());
            
            // 把头像数据传到视图
            ViewBag.ProfilePhoto = $"data:image/jpeg;base64,{base64Photo}";
        }
        catch (ServiceException ex)
        {
            // 处理异常,比如用户没有上传头像的情况
            ViewBag.ProfilePhoto = null;
            ViewBag.ErrorMessage = ex.Message.Contains("404") ? "No profile photo available" : ex.Message;
        }

        return View();
    }
}

5. 在视图中显示头像

打开对应的视图(比如Index.cshtml或者布局文件_Layout.cshtml),添加显示头像的代码:

@if (!string.IsNullOrEmpty(ViewBag.ProfilePhoto))
{
    <img src="@ViewBag.ProfilePhoto" alt="User Profile Photo" 
         style="width: 60px; height: 60px; border-radius: 50%; object-fit: cover;" />
}
else
{
    <span>@ViewBag.ErrorMessage</span>
}

最后一步:配置Azure AD应用权限

别忘了去你的Azure AD应用注册里,确保已经添加了Delegated权限User.Read,并且授予了管理员同意(如果是单租户应用的话)。这样用户登录后,应用才能获取到他们的头像信息。

备注:内容来源于stack exchange,提问作者Thushan Vithana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 10:18:10