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

GraphServiceClient结合Microsoft Identity Web在Razor Page中调用失败如何解决

问题修复方案

1. 修正Razor Page异步方法返回值

你当前IndexModel的OnGet方法使用了async void声明,这是导致报错的核心原因:ASP.NET Core中Razor Page的请求处理方法不允许使用async void,会导致请求上下文提前释放,注入的GraphServiceClient无法获取当前登录用户的身份信息,进而无法静默获取调用Graph所需的令牌。
直接将方法声明修改为:

public async Task OnGetAsync()

方法内部逻辑无需调整。

2. 修正权限Scope配置

你当前使用的https://graph.microsoft.com/.default是应用级权限的Scope,而你调用的/me接口属于用户委托权限,需要调整两处配置:

  • 修改appsettings.json中DownstreamApi的Scopes值:
    "DownstreamApi": {
      "BaseUrl": "https://graph.microsoft.com/v1.0",
      "Scopes": "User.Read"
    }
    
  • 修改IndexModel上的AuthorizeForScopes特性配置:
    [AuthorizeForScopes(Scopes = new[] { "User.Read" })]
    public class IndexModel : PageModel
    

为什么Startup中的调用可以正常执行

你在OnTokenValidated事件中是直接使用回调返回的访问令牌手动构造了GraphServiceClient,没有走依赖注入客户端的令牌获取逻辑,不受上下文丢失的影响,因此可以正常调用接口。


内容的提问来源于stack exchange,提问作者OjM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:24:02