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 看到錯誤了~

2015/12/30

[筆記] Mac OS 從終端機開啟 finder 的方法

在終端機 cd 到想要的目錄之後,輸入

 open .

即可

注意...  是歐噴空一格點喔

2015/07/11

[筆記] HTML Agility Pack

最近心血來潮要爬某個地方的 html 來用, Google 了一下發現了 HTML Agility Pack 這個套件


2015/06/02

[筆記] Mac 找不到藍芽的解決方法

早上不知道為何筆電醒了藍芽沒跟著醒 (讓我以為是滑鼠沒醒...)

重開機之後依然,之後 google 到如下方法

Command  + Option + P + R 然後開機

此快捷鍵為 重置 Mac 上的 NVRAM


2015/05/17

[筆記] 將 Thunderbird 從 Windows 轉移至 Mac

由於微軟最近發佈可以跨平台的 .Net Core  跟 Visual Studio Code  for Mac & Linux

加上公司工作機的補助年份也剛好到了,又碰上母親節檔期

所以就把工作機換成 MacBook 啦

(敗家就敗家藉口這麼多 XD)

敗家完就得開始處理資料的轉移啦

這邊Memo 一下 Thunderbird 轉移 的作法