發現全域的Cache-Control 設定會導致Action 沒有被正確觸發,而改用後端方式偵測來自Brower 的Request 資源副檔名,並加以為各別檔案設定快取。
在專案上遇到一個問題:在/Account/Login 的Action 寫了一些檢核的程式碼,發現並不是每次都會觸發到Action,就會因為檢核失敗導致錯誤發生。
發現錯誤的原因是Web.config 裡面,設定的全域的Cache-Control。所以有時候進到畫面,是從使用者電腦的disk cache 或memory cache 取得資源來渲染畫面。而無法觸發Action。
設定Cache 有蠻多種方式:
- Web.Config
- 各別Controller、Action 以屬性方式設定
- 檢查Request Header 並加工Header
本次使用的是第三種方式,因為有一些需要客製化的部分,用程式比較好達成目的。也參考了ChatGPT 蒐集到的資料。
所以在Global.asax.cs 中,將事件加入PreSendRequestHeaders
配合系統更新時間,設定每天19:00 為指定副檔名的靜態檔案資源到期時間。
References:
Response caching in ASP.NET Core | Microsoft Learn
Cache-Control - HTTP | MDN (mozilla.org)
Website Performance with ASP.NET - Part4 - Use Cache Headers - CodeProject