ASP.NET Core中IDownstreamApi服务无法解析的问题求助
以下是针对该问题的分步解决方案:
确认Program.cs中服务注册的完整性
确保在AddMicrosoftIdentityWebApp之后,正确调用EnableTokenAcquisitionToCallDownstreamApi,并添加对应下游API的注册方法。如果是自定义下游API,需调用AddDownstreamApi;如果是Microsoft Graph,则调用AddMicrosoftGraph。示例代码:var builder = WebApplication.CreateBuilder(args); builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd")) .EnableTokenAcquisitionToCallDownstreamApi() .AddDownstreamApi("DownstreamApi", builder.Configuration.GetSection("DownstreamApi")) .AddInMemoryTokenCaches(); builder.Services.AddControllersWithViews();注意:
AddInMemoryTokenCaches是必须的,用于缓存获取到的令牌。验证appsettings.json配置有效性
检查DownstreamApi节点配置是否完整,包含BaseUrl和Scopes字段;AzureAd节点需包含Instance、Domain、TenantId、ClientId等必填项。示例配置:"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" }, "DownstreamApi": { "BaseUrl": "https://your-downstream-api-url/", "Scopes": "api://your-api-client-id/access_as_user" }检查控制器依赖注入的正确性
确保HomeController的构造函数中正确注入IDownstreamApi,避免使用错误的注入方式。示例:public class HomeController : Controller { private readonly IDownstreamApi _downstreamApi; public HomeController(IDownstreamApi downstreamApi) { _downstreamApi = downstreamApi; } // 业务方法示例 public async Task<IActionResult> Index() { var data = await _downstreamApi.CallApiAsync<object>( "DownstreamApi", options => options.RelativePath = "api/data"); return View(data); } }清理重建项目并重启VS
清理项目(右键项目→清理),然后重新生成(右键项目→生成),清除可能存在的编译缓存;同时重启Visual Studio,确保配置文件的修改被正确加载。统一NuGet包版本
检查所有Microsoft.Identity.Web相关的NuGet包(如Microsoft.Identity.Web、Microsoft.Identity.Web.DownstreamApi、Microsoft.Identity.Web.UI)版本是否一致,版本不匹配可能导致服务注册失败。建议统一更新到与VS 2022 17.8.7兼容的稳定版本。
内容的提问来源于stack exchange,提问作者Craig Gers

