先說主要原因,是因為一個 NgZerro 的 Select 組件,需要顯示 placeHolder 文字,初始值為 null,然后直接綁定到查詢參數中,傳輸到后端導致 BadRequest,參數解析失敗。
原因也很簡單。。。Get請求直接帶的 localhost:4200/api/xxx?parameter=null 這里的 parameter 會被 net core 中的 DefaultModelBinder 轉換為字符串 'null',然后就是悲劇了。
解決辦法也很簡單,要么人為的編碼控制,不要有 null 的參數存在,但是這個並不能說完全就會記得(人畢竟會容易犯錯),所以就只能從 AOP 的角度去過濾了。
前端 Angular 通過 HttpInterceptor 去攔截所有請求
后端自己寫了個 ModelBinder 去過濾這種數據
至於為什么要這么麻煩去做,主要是為了容錯率,人總是會犯錯,那么就增加容錯率,畢竟人不是機器。