被这个错误坑了好多天
前提:框架Blazor
项目在本地运行没问题,发布到服务器后,报错在资源的“完整性”属性中找不到有效摘要
找解决办法的过程中开始以为是跨域资源共享和子资源完整性问题,详见:https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity#cross-origin_resource_sharing_and_subresource_integrity
使用以下
<script>
元素来告诉浏览器,在执行https://example.com/example-framework.js
脚本之前,浏览器必须首先将脚本与预期的哈希进行比较,并验证是否存在匹配项。
在报错的_frameworkjs里设置了integrity值和跨域请求
<script src="_framework/blazor.webassembly.js" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
crossorigin="anonymous"></script>
但是没有效果,遂删
又试了其他博主的办法:
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="assets/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
去掉 integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous"
全局搜了下,项目里没有设置integrity的地方且不可能一个个去设置
最后解决办法:
在项目csproj下属性PropertyGroup下加一句属性BlazorCacheBootResourcess设置为false,禁用非PWA应用程序的完整性检查
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<BlazorCacheBootResources>false</BlazorCacheBootResources>
</PropertyGroup>
BlazorCacheBootResources
也禁止Blazor的高速缓存的缺省行为.dll
,.wasm
根据他们的SHA-256散列和其他文件,因为属性指示SHA-256散列不能在正确性依赖。即使使用此设置,浏览器的常规HTTP缓存仍可能会缓存那些文件,但是是否发生这种情况取决于您的 Web服务器配置及其所cache-control
服务的标头。
解决文档地址:https://docs.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/webassembly?view=aspnetcore-5.0
如此设置后,成功解决。