Blazor WASM部署Azure静态Web应用时遇完整性校验问题
解决Blazor WASM部署Azure静态Web应用的完整性错误及部署失败问题
问题根源
- 完整性错误:你的
staticwebapp.config.json放在Blazor项目的wwwroot目录下,dotnet publish时会将其纳入Blazor WASM的资源清单(_framework/blazor.boot.json)并生成integrity哈希。但Azure静态Web应用会读取这个配置文件,导致实际文件内容或传输过程中与哈希不匹配,触发浏览器的完整性校验拦截。 - 部署失败:之前调整
app_location和output_location时,未同步调整配置文件的位置及发布逻辑,导致Azure无法正确识别静态内容或配置文件。
分步解决方案
1. 调整配置文件位置
将staticwebapp.config.json从Blazor项目的wwwroot目录,移动到Web项目的根目录(与Web.csproj同级)。
2. 修改项目文件,确保配置文件被发布
编辑Web.csproj,添加以下内容,确保publish时将配置文件复制到输出目录的根:
<ItemGroup> <None Include="staticwebapp.config.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup>
3. 更新部署YAML配置
修改Azure静态Web应用的部署步骤,调整app_location和output_location:
- name: Publish Blazor Project run: dotnet publish ./Web/Web.csproj -c:Release --no-restore -o dist/Web --nologo - uses: Azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ env.AZURE_STATIC_WEB_APPS_API_TOKEN }} action: "upload" app_location: "dist/Web" # 指向dotnet publish输出的根目录 api_location: "" output_location: "wwwroot" # 指定静态内容所在的子目录 skip_app_build: true
原理说明
- 把
staticwebapp.config.json移出wwwroot后,它不再被Blazor视为应用资源,不会生成integrity哈希,彻底避免校验错误。 - 通过csproj的复制任务,配置文件会被放到publish输出的根目录,Azure静态Web应用能直接读取并应用该配置。
- 调整
app_location和output_location后,Azure会正确识别dist/Web/wwwroot作为静态应用的内容目录,同时根目录的配置文件生效,解决部署失败问题。
内容的提问来源于stack exchange,提问作者fingers10
相关产品推荐
相关产品推荐

