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

ASP.NET Core 8 MVC项目Docker容器中Blazor页面请求报错排查

问题:Docker中ASP.NET Core 8.0 MVC+Blazor页面请求连接被拒绝

错误信息

blazor.server.js:1 [2025-04-01T04:53:37.291Z] Error: System.Net.Http.HttpRequestException: Connection refused (localhost:32784)

问题触发代码

该错误由Razor页面中的HTTP请求代码引发,相关代码片段:

protected async override void OnInitialized()
{
    var request = new HttpRequestMessage(HttpMethod.Get, uri);
    var response = await client.SendAsync(request);
}

项目配置

Program.cs

builder.Services.AddServerSideBlazor().AddCircuitOptions(options => { options.DetailedErrors = true; });

builder.Services.AddControllersWithViews();

builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

builder.Services.AddDistributedMemoryCache();

builder.Services.AddHttpClient();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseMigrationsEndPoint();
}
else
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.UseSession();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.MapRazorPages();

app.MapBlazorHub();

.csproj

<PackageReference Include="HtmlAgilityPack" Version="1.11.43" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.14" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="8.0.14" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.14" />
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="8.0.14" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.14" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.14">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.21.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.7" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.19" />

修复方案

  • 容器内localhost指向问题:Docker容器内的localhost是容器自身回环地址,若uri指向宿主机的localhost:32784,容器无法访问。替换为宿主机局域网IP,或使用Docker Desktop专属DNShost.docker.internal;若请求容器内服务,确认服务正常运行且端口已暴露。
  • HttpClient使用规范:确保HttpClient通过依赖注入获取,避免手动实例化导致的配置缺失;若请求当前应用API,直接注入服务层调用业务逻辑,无需HTTP请求。
  • 端口映射检查:运行docker ps确认宿主机32784端口已映射到容器内服务监听端口,未映射则添加-p 32784:容器内端口参数启动容器。
  • 移除冗余依赖包:项目使用ServerSideBlazor,Microsoft.AspNetCore.Components.WebAssembly.Server是Blazor WASM托管包,属于冗余引用,建议移除该包以避免冲突。
  • Blazor Hub配置验证:确保app.MapBlazorHub();在UseRouting()之后、端点映射之前正确配置,保证Blazor信号连接正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:53:10