如何解决blazor.server.js未找到且返回ERR::ABORTED错误?
解决Blazor Server中blazor.server.js返回ERR_ABORTED的问题
核心问题定位
从现象(浏览器请求blazor.server.js但仅获取55B无效内容)和代码来看,最大嫌疑是自定义静态文件拦截逻辑误拦截了框架文件请求,其次需要验证路由与中间件配置的正确性。
解决方案步骤
1. 修复静态文件拦截逻辑
你的UseStaticFiles拦截代码中,只要请求路径以/Sharlog开头就会返回418错误并清空响应体。如果应用部署在/Sharlog子路径下,/_framework/blazor.server.js的实际请求路径会是/Sharlog/_framework/blazor.server.js,会被这个拦截逻辑命中,导致返回无效内容。
修改拦截代码,排除框架和第三方组件的静态文件路径:
app.UseStaticFiles(new StaticFileOptions() { OnPrepareResponse = s => { s.Context.Response.Headers.Append("Cache-Control", $"public, max-age={(60 * 60 * 24 * 7).ToString()}"); var requestPath = s.Context.Request.Path; // 仅拦截指定Sharlog路径下的资源,排除框架和第三方组件文件 if (requestPath.StartsWithSegments(new PathString("/Sharlog")) && !requestPath.StartsWithSegments(new PathString("/_framework")) && !requestPath.StartsWithSegments(new PathString("/_content"))) { Console.WriteLine("BLOCK CRIT. ACCESS"); s.Context.Response.StatusCode = 418; s.Context.Response.Body = Stream.Null; s.Context.Response.ContentLength = 0; } } });
2. 验证中间件与路由顺序
确保Program.cs(或Startup.cs)中的中间件顺序正确,框架相关路由配置必须放在正确位置:
// 先启用静态文件服务 app.UseStaticFiles(); // 启用路由 app.UseRouting(); // 其他中间件(如授权等)... // 配置端点 app.UseEndpoints(endpoints => { // 必须配置Blazor Hub路由 endpoints.MapBlazorHub(); // 配置回退到_Host页面 endpoints.MapFallbackToPage("/_Host"); });
3. 检查Base Href配置
确认_Host.cshtml中的<base href="~/" />是否与应用实际部署路径匹配:
- 如果应用部署在根路径,保持
~/"即可; - 如果部署在
/Sharlog子路径,修改为:
<base href="/Sharlog/" />
4. 临时排查验证
先注释掉自定义的UseStaticFiles拦截逻辑,重新运行应用,查看blazor.server.js是否能正常加载。如果加载正常,说明拦截逻辑是问题根源,按步骤1调整即可。
补充说明
- 你在
Index.razor中使用@page "/{*param}"捕获所有Blazor路由不会影响静态文件请求(包括/_framework和/_content路径),因为这些路径由ASP.NET Core静态文件中间件直接处理,不经过Blazor路由系统。 - MudBlazor的JS能正常访问,是因为
/_content/MudBlazor/MudBlazor.min.js路径未被你的拦截逻辑命中(如果应用部署在根路径),但框架文件可能被命中,这是两者的差异点。
内容的提问来源于stack exchange,提问作者Feiron
相关产品推荐
相关产品推荐

