從無到有建立一個前後端分離的新專案(Angular + .Net Core WebAPI + PostgreSQL)

最近工作剛好有個自己從無到有建置一個專案的機會,自己也是第一次從無到有的自己建置一個專案,機會難得,紀錄一下整個過程,大致會有下列幾個主要步驟:

  1. 建立後端.Net Core WebAPI新專案
  2. 建立Angular新專案,並安裝Angular Material & Bootstrap
  3. 建立資料(Repository)層
  4. 後端API權限設定
  5. Angular呼叫後端WebAPI & CORS處理
...繼續閱讀 »

.Net Core WebAPI 傳值到後端Controller的方法

網頁功能最常用的就是資料間的傳遞,不管事表單資料傳送到後台,或者是輸入查詢資料後,由後端DB回傳資料。這之間都少不了傳輸資料到後台。
在以前MVC的時候,可以透過Razor語法的HTML Helper的BeginForm,在Submit之後,會透過ModelBinding把資料傳到後端Controller。
或是在View直接把整個Form序列化(serilizeArray)後再傳給後端。
現再寫前後分離(Angular + .Net 6 WebAPI)採用WebAPI來開發,剛完成第一個前後分離專案,順便把資料傳送到Controller的方式記錄下來。

...繼續閱讀 »

從頭建置一個MSTest單元測試專案

之前工作時就有接觸到單元測試(Unit Test),但僅限於使用別人寫好的單元測試而已。目前工作上剛好有機會能自己寫單元測試,就把整個從建立但撰寫到執行單元測試的過程記錄下來。

使用的單元測試框架為.Net Core內建的MS Test。

再開始寫單元測試前,介意先看一下保哥寫的單元測試系列文,建立一些對於單元測試的觀念=>保哥-單元測試相關系列文章

...繼續閱讀 »

DI & IoC_何謂相依性&耦合性

控制反轉(Inverse of Control, IoC)是一種設計模式,相依性注入(Dependency Injection)則是實踐IoC的一種方式,為什麼要IoC? 先來看看物件導向S.O.L.I.D.原則裡面的D.,依賴反轉原則(Dependency inversion principle,DIP)有下列特性:

  1. 高層次的模組不應該依賴於低層次的模組,兩者都應該依賴於抽象介面。
  2. 抽象介面不應該依賴於具體實現。
  3. 而具體實現則應該依賴於抽象介面。
...繼續閱讀 »

.Net Core使用FromSqlRaw()直接下SQL撈取資料,並存放到自定義類別

撈取DB資料時,如果是單一資料來源的話,直接使用EF Core是很方便。但更多時候資料來源是多張表單,Join完之後又要Group By,好了之後再把結果拿去Join其他表,或是再做子查詢。像這種時候如果沒有寫成View而是直接用Lambda或是LinQ語法來兜的話,實在是寫得很痛苦。以我來說,只要是查詢語法比較複雜的話我都習慣直接下SQL語法,再用自定義類別來接查詢結果。

記得以前在.Net Framework的時候,做法好像沒有這麼複雜,.Net Core會比較複雜一點,以下是使用PostgreSQL來實作,但使用MS SQL應該也不會差太多。

另外附上以前.Net Core3使用ADO.Net的方式

...繼續閱讀 »

利用Docker Desktop on Windows建立MS SQL Server Container

公司筆電因為權限問題,安裝MS SQL時都會一直報錯,無法安裝,但有些功能還是MS SQL使用比較習慣。

後來決定自己在VirtualBox上架個Linux的VM(不選Windows是因為不想花錢買序號)在裡面架設MS SQL SERVER,但步驟又有點複雜,且架好之後,本機又會連線不到VM環境的SQL SERVER,也沒那麼多時間去研究環境問題,於是就放棄了。

後來又在Azure上架了一台MS SQL Server,雖然步驟不複雜,也可以成功連線,但試用期過後每個月都要扣錢,對於只是用來做些測試功能的我來說,實在是不划算。

後來想說自己也沒有接觸過Docker這個東西,就趁這個機會,架了一個SQL SERVER服務,結果也能成功連線,就順便把整個過程記錄下來。

...繼續閱讀 »

透過postMessage完成兩個分頁之間資料互相傳輸

最近有個需求
大概是主要畫面為輸入表單(母頁面),輸入完成後,會把資料存放到List,要查看時就透過Modal彈跳視窗顯示(子頁面)。
但User有新需求為想要邊編輯表單資料又可以同時看到資料List,那麼就不能用Modal彈跳視窗的方式來完成。
因為Modal彈跳視窗其實是個遮罩,會造成遮罩後的頁面功能無法使用。
勢必要用兩個分頁來處理,但主.次頁面之間會有資料互相傳遞,這時就能透過postMessage這個API來處理

...繼續閱讀 »

AJAX 加入 AntiForgeryToken

為了防止CSRF攻擊,我們可以在MVC的Controller加上ValidateAntiForgeryToken這個標籤來進行Token的驗證,通常在前端的Form裡面也會加上@Html.AntiForgeryToken()來產生要跟後端驗證的Token,但如果有時候只是要透過AJAX來進行資料異動(ex:刪除資料)這種沒有表單的動作時,我們要把@Html.AntiForgeryToken()加在哪裡才不會打AJAX時老是出現500的回應呢?

...繼續閱讀 »

JQuery如何把特殊符號(ex:< . >)當成純字串顯示

今天上班時遇到個問題,我有一個表單是允許輸入特殊符號的(ex:'<'. '>')。表單輸入完後要把輸入的資料組合成tr. td字串append到我的<table>後面,但卻遇到了個問題。只要我輸入的表單欄位有包含'<'或是'>',render出來的畫面都會怪怪的,雖然知道應該是特殊符號的問題導致HTML變的怪怪的,但之前都是有遇到問題才去找答案,為節省日後時間,就趁這次機會做個筆記記錄下來。

...繼續閱讀 »

使用Unobstrusive-AJAX來執行AJAX

Unobstrusive-AJAX是為微軟的一個Js套件,你可以再HTML標籤裡加上一些特定的屬性,不用自己寫$.ajax類似的Js程式碼,即可完成以前的AJAX效果。其實優點我也不是很懂,google一下是說可以不用在前端cshtml裡面寫太多的javascript吧,可以把大部分的Js程式移到外部js檔,讓html跟Js切分得更乾淨。

...繼續閱讀 »

jQuery Validation Plugin + jQuery.validate.unobtrusive + AJAX,不透過form submit來做網頁表單驗證

表單驗證是網頁很常用的功能,通常是submit會觸發驗證流程(會把jQuery.validator.unobtrusive.parse("#form1");  會把檢核觸發寫在submit button裡)。但今天收到個需求,網頁因為某些因素不想透過submit 表單post資料到後台,想要透過ajax的方式來post資料,但validator又一定需要把要驗證的<input>包在<form>裡面的情況下(如果把<form>拿掉,就不會有驗證效果),要如何觸發表單驗證?

...繼續閱讀 »