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

Blazor TypedClient调用AddHttpMessageHandler抛出InvalidOperationException问题

问题原因

这个异常是两个配置错误共同导致的循环依赖问题:

  1. 你额外添加了一段手动注册HttpClient实例的代码,和AddHttpClient<T>自带的注册逻辑冲突,触发了Lazy实例的递归访问。
  2. 服务注册顺序错误,BaseAddressAuthorizationMessageHandler依赖的认证相关服务是在AddOidcAuthentication方法中注册的,你将HttpClient的注册放到了认证服务注册之前,导致Handler依赖的服务无法被正常解析。

解决方案

按以下两步修改代码即可:

  1. 删掉多余的手动注册HttpClient的代码:
// 完全删除这段代码
builder.Services.AddScoped(serviceProvider =>
{
    return serviceProvider.GetRequiredService<IHttpClientFactory>().CreateClient(nameof(ApplicationHttpClient));
});

AddHttpClient<ApplicationHttpClient>方法已经自动将Typed HttpClient作为作用域服务注册到容器中,你可以直接在组件、服务的构造函数中注入ApplicationHttpClient使用,无需手动从工厂创建再注册。

  1. 调整服务注册顺序,将认证服务的注册逻辑放到HttpClient注册逻辑之前。

修正后的完整代码

// Blazor WebAssembly 'Program.cs'
public static async Task Main(string[] args)
{
    var builder = WebAssemblyHostBuilder.CreateDefault(args);
    builder.RootComponents.Add<App>("#app");

    // 第一步:先注册OIDC认证服务
    builder.Services.AddOidcAuthentication<RemoteAuthenticationState, RemoteUserAccount>(options =>
    {
        builder.Configuration.Bind("Google", options.ProviderOptions);
        options.ProviderOptions.DefaultScopes.Add("email");
    }).AddAccountClaimsPrincipalFactory<RemoteAuthenticationState, RemoteUserAccount, CustomAccountClaimsPrincipalFactory>();

    // 第二步:再注册带授权Handler的Typed HttpClient
    builder.Services.AddHttpClient<ApplicationHttpClient>(nameof(ApplicationHttpClient), client =>
    {
        client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress);
    }).AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();

    await builder.Build().RunAsync();
}

补充说明

你自定义的NoobHandler没有任何依赖项,所以不受注册顺序、额外注册逻辑的影响,能正常实例化运行。BaseAddressAuthorizationMessageHandler依赖IAccessTokenProvider等多个认证相关服务,错误的配置才会触发本次异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 19:45:07