2016/11/10

[C#] 使用 Obsolete 屬性來標記過時的方法或物件

專案跑久了總是會有一些功能改寫或補強,考慮向前相容時又怕同事新寫的 code 去用到即將拔掉的功能


2016/11/01

[筆記] 移除 ClickOnce 程式

工作上遇到 ClickOnce 的程式由開發的測試階段轉為上線時

因為安裝來源 Url 改變導致無法啟動



總不能因為這樣要準備一個 vm 來測 (被測試圍毆

2016/10/25

[筆記] ASP.NET MVC 改用 Json.Net 回應 JSON 時處理 XSS 問題

其實 ASP.NET MVC 內建的 JavaScriptSerializer 就有做到將 html 給 encode 來預防 xss 了



但為了效能ISO 8601 日期格式考量

在我們開發的系統中就把 JavaScriptSerializer 給換成 Json.Net 了 (如下 & 作法的參考網址)

2016/07/25

安裝 Docker for Mac

之前裝了 parallels 11 pro 想說有一天要來玩玩 docker 就一直沒下文

直到最近要玩 wordpress,但又不想把一堆東西裝在 mac 上 (是有多少!)

就想說既然當初都為了想玩這個裝了 parallels 11 pro 了  就來玩玩看吧

早上弄了一整天的 parallels docker-machine

用了半天一直覺得好像哪邊怪怪的, 怎麼 eval 完之後 docker build 下去 parallels 的虛擬機一直肥起來....

才知道還是裝了一個 docker 的虛擬機在 parallels 裡面 XDrz

(難怪叫 docker machine 0rz

2016/07/19

[筆記] 讓 Visual Studio 直接用無痕模式跑 Web 專案

幫公司裡的 PG 看問題時常常發現問題追了半天是 cache 沒清

寫一篇來記錄一下怎麼讓 vs 直接開隱私瀏覽來跑正在寫的 code


2016/06/18

[茶包?] googlecode 收掉導致 code prettify 無效問題

這篇中提到的方法因為 google code 收掉導致不會上色了

新的 code 都在 https://github.com/google/code-prettify 上

根據上面的說明使用

 <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>

就可以了

指定樣式的 querystring 一樣有效~

[筆記] 使用自訂的 Scaffold Templates 來加快 ASP.NET MVC 的開發

最近要開發的新系統終於準備好要開始投入大量人力開發了

由於多人開發上要要求每個人在某某功能的版面時要按照怎樣的結構來刻 HTML 有難度 

加上之前跟某位朋友聊天時提到他們家有使用 Scaffold Templates

故想說.... 與其一直宣導該怎樣寫,不如讓大家預設拿到的就是結構已經長好的頁面

2016/03/19

[筆記] 用 jQuery 批次下載網頁上的圖片

上次在某個 fb 社團看到分享使用 jQuery 下載全部圖片

但裡面除了教你  include jQuery 之外都是用原生的 javascript 功能, 寫起來有點長

倒是學到如果網站沒有 jQuery 要怎麼幫他裝 jQuery XDDDD

來寫寫看全部都用 jQuery 下載圖片的寫法

2016/03/18

[筆記] ASP.Net MVC 使用 ActionFilter 驗證 ModelState

利用 MVC 的 Model binding 時都要檢查 ModelState 是否有正確

 if (!ModelState.IsValid) return new HttpStatusCodeResult(HttpStatusCode.BadRequest) 


但每個 Action 都要記得這樣檢查實在是太累了 (而且有些人會忘記....)

所以直接做成 Filter 讓每個 request 都會執行這樣~

     public class ModelStateValidationFilter : System.Web.Mvc.ActionFilterAttribute
    {
        public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
        {
            if (!filterContext.Controller.ViewData.ModelState.IsValid)
            {
                var errors = from errs in (
                        from modelstate in filterContext.Controller.ViewData.ModelState.Values
                        select modelstate.Errors
                    )
                    where errs.Count > 0
                    select errs[0].ErrorMessage;

                // 用 Elmah 記錄誰在哪邊沒通過驗證
                Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception(String.Join(",",errors.ToArray())));
                // 回應錯誤
                throw new HttpException(400);
            }

        }
    }


寫好之後要在 FilterConfig 中加入

    filters.Add(new ModelStateValidationFilter()); 

目前在寫的系統是用 Ajax From, 所以直接拋錯誤回去就可以 (讓 js 接手 on fail)

如果是重讀整個頁面的這樣就會直接讓 user 看到錯誤了~