Blazor Server集成MSAL调用API报错:无法注入IDownstreamWebApi
解决Blazor Server调用受保护API时IDownstreamWebApi未注册的问题
问题根源
VS模板自动配置认证时,可能因跨.NET版本(Blazor Server为.NET7,API为.NET8)或项目创建时的选项遗漏,未完整注册IDownstreamWebApi服务,导致依赖注入失败。
修复步骤
1. 确认NuGet包版本兼容
确保Blazor Server项目中安装的Microsoft.Identity.Web和Microsoft.Identity.Web.UI版本适配.NET7(建议使用7.x系列版本,避免直接用8.x版本,后者对应.NET8)。
2. 注册下游API服务
修改Blazor Server项目的Program.cs,在认证配置代码后添加下游API服务注册:
// 原有认证配置 builder.Services.AddMicrosoftIdentityWebAppAuthentication(builder.Configuration); // 添加下游API服务注册(整合式配置) builder.Services.AddMicrosoftIdentityWebAppAuthentication(builder.Configuration) .EnableTokenAcquisitionToCallDownstreamApi() .AddInMemoryTokenCaches(); // 或者针对特定API单独注册(需对应appsettings.json中的配置节点) builder.Services.AddDownstreamWebApi("YourApi", builder.Configuration.GetSection("DownstreamApi"));
3. 完善appsettings.json配置
确保配置文件中包含下游API的基础地址和权限范围:
"DownstreamApi": { "BaseUrl": "https://localhost:<你的API端口>/", "Scopes": "api://<你的API客户端ID>/access_as_user" }
其中<你的API客户端ID>是Entra中API应用的客户端ID,<你的API端口>是Web API项目运行的端口。
4. 检查页面注入代码
确认Blazor页面中IDownstreamWebApi的注入语法正确:
[Inject] public IDownstreamWebApi DownstreamAPI { get; set; } = default!;
为什么模板未自动配置?
可能是以下原因:
- 创建Blazor Server项目时,未勾选「调用下游API」相关选项(部分VS模板提供该选项,用于自动添加下游API配置);
- .NET7与.NET8跨版本组合下,模板的自动配置逻辑存在兼容性遗漏,未完整添加下游API服务注册代码。
内容的提问来源于stack exchange,提问作者Mark Evans
相关产品推荐
相关产品推荐

