![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL5EjN3AzN1YTM3EDNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
被這個錯誤坑了好多天
前提:架構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" target="_blank" rel="external nofollow" 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>
也禁止Blazor的高速緩存的預設行為
BlazorCacheBootResources
,
.dll
根據他們的SHA-256散列和其他檔案,因為屬性訓示SHA-256散列不能在正确性依賴。即使使用此設定,浏覽器的正常HTTP緩存仍可能會緩存那些檔案,但是是否發生這種情況取決于您的 Web伺服器配置及其所
.wasm
服務的标頭。
cache-control
解決文檔位址:https://docs.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/webassembly?view=aspnetcore-5.0
如此設定後,成功解決。