Blazor WebAssembly构建的PWA刷新时出现ERR_FAILED错误如何解决?
Blazor WASM PWA部署到IIS子应用刷新报错ERR_FAILED的原因
首先排除localStorage影响:localStorage仅做前端数据存储,默认按域名+路径隔离,不会直接触发网络层的ERR_FAILED报错,优先排查以下问题:
1. 子应用路径配置不匹配
Blazor WASM默认按根路径开发,部署到wapp子应用时3处配置漏改会直接导致刷新报错:
wwwroot/index.html中的<base>标签未修改:默认值为<base href="/" />,需改为<base href="/wapp/" />,前后斜杠不可省略,否则静态资源、路由解析都会走根路径导致资源找不到- Service Worker注册路径错误:默认PWA模板的Service Worker按根路径注册,需修改注册代码的路径前缀为
/wapp/,同时同步修改ServiceWorker.published.js中的资源匹配路径,否则刷新时Service Worker请求资源仍走根路径,无对应资源就返回ERR_FAILED - IIS URL重写规则未适配子应用:Blazor是单页应用,所有前端路由都需要回退到
index.html,子应用部署时需把重写规则的匹配路径改为^wapp/.*,重写目标改为/wapp/index.html,否则IIS会把前端路由当做真实服务器路径请求,无对应文件就返回错误
2. Service Worker缓存冲突
默认Blazor PWA模板使用CacheFirst缓存策略,如果你之前在同域名根路径部署过应用,或者部署子应用前访问过旧版本,旧的Service Worker和缓存的根路径资源会残留,刷新时优先读取旧缓存,路径不匹配就触发ERR_FAILED。可在Chrome控制台Application标签页,手动清除当前站点的Service Worker和Cache Storage内容后再测试。
3. IIS缺失MIME类型映射
Blazor WASM运行需要的.wasm、.dll、.dat后缀文件,IIS默认没有配置对应MIME类型,刷新时请求这类资源会返回404,叠加Service Worker的错误处理逻辑就会转为ERR_FAILED。需要在IIS的wapp子应用MIME类型配置中添加3条规则:
.wasm对应application/wasm.dll对应application/octet-stream.dat对应application/octet-stream
内容的提问来源于stack exchange,提问作者cvalueapp
相关产品推荐
相关产品推荐

