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
相关产品推荐
相关产品推荐

