带授权的ASP.NET托管Blazor WebAssembly加载blazor.boot.json报fetch失败
Blazor WASM授权后blazor.boot.json加载失败解决方案
核心原因
授权中间件拦截了Blazor运行时必需的blazor.boot.json静态资源请求,身份验证跳转流程中断了资源加载。Chrome中Fiddler抓包显示的304状态码仅代表该资源本地缓存命中,但因请求发起时身份上下文未完成验证,浏览器主动终止了资源读取,因此控制台仍抛出fetch失败报错,火狐下对应错误标识为NS_BINDING_ABORTED。
修复步骤
- 配置静态资源豁免授权验证,在Program.cs中将
/_framework路径下的Blazor核心静态资源设置为允许匿名访问,注意该配置必须放在app.UseAuthorization()之前:
using Microsoft.AspNetCore.Authorization; app.UseWhen(context => context.Request.Path.StartsWithSegments("/_framework"), appBuilder => { appBuilder.Use(async (context, next) => { context.SetEndpoint(new Endpoint( _ => Task.CompletedTask, new EndpointMetadataCollection(new AllowAnonymousAttribute()), "BlazorStaticResourceAnonymousAccess")); await next(); }); });
- 若开启了PWA离线支持,修改
service-worker.published.js中的资源匹配规则,排除授权回调路径的缓存拦截,避免缓存的未授权状态资源覆盖正常请求。 - 清除浏览器站点缓存、Cookie后执行强制刷新(Ctrl+Shift+R),避免304缓存命中干扰配置验证。
- 检查反向代理(Nginx/IIS/云服务应用托管平台)层面的授权与重定向规则,非代码层面的代理规则变更和代码版本无关,也会触发该问题。
内容的提问来源于stack exchange,提问作者Joe Robe
相关产品推荐
相关产品推荐

