Blazor应用部署后出现资源integrity属性有效摘要查找失败错误
Blazor资源完整性校验报错排查方案
资源'https://mydomain.no/_framework/Faso.Blazor.SpinKit.dll'的'integrity'属性中未找到有效摘要,计算得到的SHA-256完整性值为'1UEuhA1KzEN0bQcoU0m1eL4WKcCIWHhPgoXydAJnO9w=',该资源已被拦截。
问题本质
该报错是Blazor WebAssembly的子资源完整性校验机制触发拦截:发布阶段生成的blazor.boot.json文件中记录的Faso.Blazor.SpinKit.dll的SHA256哈希值,与浏览器实际从服务器获取到的该文件的哈希值不匹配,所以阻止了资源加载。
排查解决步骤
- 校验文件传输一致性
先停止服务器上的站点,删除站点部署目录下的所有文件,本地VS清理解决方案后删除bin、obj文件夹,重新生成发布包,使用Web Deploy全量部署(不要使用增量部署),避免文件锁或传输不完整导致的文件内容不一致。
可通过PowerShell分别校验本地发布包和服务器部署目录下该dll的哈希,确认是否一致:Get-FileHash -Path "Faso.Blazor.SpinKit.dll路径" -Algorithm SHA256 | Select-Object Hash - 排除IIS静态压缩影响
WinServer 2016的IIS默认可能对.dll后缀静态资源启用Gzip/Brotli压缩,压缩后的文件哈希与原始哈希不匹配,可在站点web.config中添加如下配置禁用对应类型压缩:<system.webServer> <httpCompression> <staticTypes> <remove mimeType="application/octet-stream" /> <add mimeType="application/octet-stream" enabled="false" /> </staticTypes> </httpCompression> <staticContent> <remove fileExtension=".dll" /> <mimeMap fileExtension=".dll" mimeType="application/octet-stream" /> </staticContent> </system.webServer> - 检查中间层内容修改
如果站点前部署了CDN、WAF、反向代理等中间服务,先清空所有缓存,关闭资源自动压缩、内容注入等规则后重试,中间层对静态资源的修改会直接导致哈希校验失败。 - 强制重新生成完整性哈希
在项目的.csproj文件中添加如下配置,禁用Blazor boot资源缓存和默认压缩,强制发布时重新计算所有资源的完整性哈希:<PropertyGroup> <BlazorCacheBootResources>false</BlazorCacheBootResources> <BlazorEnableCompression>false</BlazorEnableCompression> </PropertyGroup> - 校验运行环境版本匹配
确认服务器上安装的.NET 5 托管捆绑包版本,与本地编译用的.NET 5 SDK版本完全一致,版本差异可能导致编译输出的dll哈希不匹配。
内容的提问来源于stack exchange,提问作者Bjørn Hellesylt
相关产品推荐
相关产品推荐

