BaseAddressAuthorizationMessageHandler服务未找到错误的解决求助
问题根源
你误用了Blazor WebAssembly专属的BaseAddressAuthorizationMessageHandler,这个组件仅适用于客户端Blazor应用的身份认证场景。而你的项目是传统ASP.NET Core MVC应用(基于Windows Identity/Negotiate认证),既没有引入Blazor WASM的身份认证包,也不需要这个处理器,所以DI容器找不到对应的服务。
解决方案
替换掉错误的消息处理器,改用服务器端ASP.NET Core传递Windows身份凭据的标准方式:通过HttpClientHandler开启UseDefaultCredentials,让HttpClient调用API时自动携带当前登录用户的Windows凭据。
具体代码修改
修改ServiceCollectionExtensions.cs中AddHttpClient的配置,移除AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>(),替换为配置HttpClientHandler:
serviceCollection.AddHttpClient<UploadRulesClient>("ServerAPI", (httpClient) => { httpClient.BaseAddress = new Uri(configuration["AuraApiClient:BaseAddress"]); }) .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { // 启用默认凭据,自动传递当前Windows用户身份 UseDefaultCredentials = true }); serviceCollection.AddHttpClient<ScenarioZipFilesClient>("ServerAPI",(httpClient) => { httpClient.BaseAddress = new Uri(configuration["AuraApiClient:BaseAddress"]); }) .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { UseDefaultCredentials = true });
额外注意事项
- 确保API端已正确配置Windows身份认证(启用Negotiate/NTLM),并且WebApp与API处于同一域或已建立信任关系,避免Kerberos/NTLM身份传递失败。
- 检查你的API授权策略是否允许当前用户的角色/身份访问对应的接口。
内容的提问来源于stack exchange,提问作者Atakan
相关产品推荐
相关产品推荐

