[廚餘回收] 關於 ASP.NET MVC 中 OutputCache 的 VaryByParam 屬性有一個不盡善盡美的地方

這天在追查為何 A 客戶的訂單會出貨到 B 客戶哪裡去? 於是我看到了下面這段程式碼:

在 Login 的 Action 上面被加了 OutputCacheAttribute,Duration 屬性被設成 3,其中還用到了 VaryByParam 屬性,我猜寫這段 Code 的工程師應該是想要為每個登入的帳號做 OutputCache,這樣設定沒有問題,問題出在 HTTP Request 的發送內容。

...繼續閱讀 »

[創意料理] 用 ASP.NET MVC 的 Display Mode 讓 View 依使用者角色來拆分以減少邏輯分支

先前有寫過一篇文章 - 將 ASP.NET MVC 的 View 依使用者角色來拆分可以減少邏輯分支,在留言中 demo 哥有提到用 Display Mode 也可以漂亮地解決,於是我就試著把這樣的需求用 Display Mode 來實作,實作之後我必須說,程式碼真的可以少寫一些。

...繼續閱讀 »

[桌邊服務] 將 ASP.NET MVC 的 View 依使用者角色來拆分可以減少邏輯分支

各位朋友應該都有碰過一種需求,就是有一個頁面,這個頁面服務的是廣大的 User,在這群廣大的 User 中有分好幾群,有的群要顯示這個不能顯示那個、有的群要顯示那個不能顯示這個、...,這是很典型的需求,你我的公司裡面應該都存在著這樣的頁面,而且裡面的 if...else... 錯綜複雜,我們冷靜想想,其實這種需求的設計是可以更簡單的。

...繼續閱讀 »

[小菜一碟] 預熱 ASP.NET MVC 的 View

ASP.NET MVC 的 View 預設是 Load on Demand(按需加載),也就是說 View 第一次要 Render 的時候才會去載入跟編譯,這個就會造成一個現象,即使 Web 應用程式已經完成啟動,在瀏覽頁面的時候也是會感覺到一點延遲,尤其 Web 應用程式部署在 Azure App Service 上更為明顯,既然這樣,那我們就在 Web 應用程式啟動時候,把所有 View 載入跟編譯,然後 Render 一次就行了,我們來看看怎麼做?

...繼續閱讀 »

[食譜好菜] ASP.NET MVC 應該多多利用瀏覽器的 Cache

長期在 ASP.NET 打滾,講到 Cache 第一時間就會想到 Redis、Memcached、... 這種伺服器端的 Cache 服務,但是在 Web 技術領域內還有瀏覽器端的 Cache,如果沒有特別指定,檯面上這些主流的瀏覽器都會把 Web 伺服器回應的內容存起來,我們應該要好好地利用它們來降低伺服器跟網路的壓力。

...繼續閱讀 »

[創意料理] ASP.NET MVC 在網址不變的情況下,自訂 HTTP 400(Bad Request)狀態碼的回應內容。

先前有寫過一篇個人常用的 ASP.NET MVC 自訂 HTTP 回應碼畫面的套路,一切看起來都很好,但是當使用者輸入一些資料,驗證不通過的時候,想要送 400(Bad Request)順便在 Body 中塞入一些訊息回傳給使用者,不做點調整是做不到的。

...繼續閱讀 »