做網頁系統開發一定會遇到帳號登入的問題。
大家都知道密碼要用[HttpPost]放在Request Body裡面來進行傳遞。這句話只對了一半,因為只要在瀏覽器按下F12進入開發者模式,密碼還是會被看光光的,好恐怖的阿。
所以對密碼進行加密是最基本的資安防護。
做網頁系統開發一定會遇到帳號登入的問題。
大家都知道密碼要用[HttpPost]放在Request Body裡面來進行傳遞。這句話只對了一半,因為只要在瀏覽器按下F12進入開發者模式,密碼還是會被看光光的,好恐怖的阿。
所以對密碼進行加密是最基本的資安防護。
這幾天剛 好有機會把WebAPI ModelBinding的方式整理一下,MVC也是差不多的用法,但還是會有一些差異。
今天會用到[FromRoute], [FromQuery], [FromBody]這三種ModelBinding方式
ActionFilter的流程以及ActionFilter流程結束時間點的研究。
使用ActionFilterAttribute抽象類別並覆寫OnActionExecuting。實作IP過濾
.Net 7 Open API Swagger設定
寫.Net程式一定會遇到非同步(await/async),async要放在哪裡比較沒有異議,但await放的地方才是重點。
當我們透過HttpClient要調用API時,Model Binding是一個重要的東西。要給API的參數可以來自URL網址參數,可以以來自網址路由,可以來自表單。
如果是POST的話,資料則是可以放在Body裡面。
這篇文章整理了一些比較常見的傳輸參數的作法。
這幾天再用Insomnia測試API時,發現到:
使用IIS Express啟動網頁時,API可以透過Insomnia成功呼叫。
但使用Kestrel(https)啟動網頁時,呼叫API會一直回應401 Unauthorized的錯誤,但直接用瀏覽器卻又可以成功呼叫API。
SignalR是一個自己蠻有興趣的東西,提供Server與Client端之間的即時通訊,而且使用也不算複雜。
SignalR所提供的功能有:
這次利用SignalR來做個訊息推播(Server to Client) & 廣播(Client to Client)的簡單範例。
Client to Client廣播測試請參考另外一篇文章 => SignalR(二):Server to all Client推播 & Client to all Client廣播
=================
SignalR是一個自己蠻有興趣的東西,提供Server與Client端之間的即時通訊,而且使用也不算複雜。
SignalR所提供的功能有:
這次利用SignalR來做個訊息推播的簡單範例。
Scoped:每次Post/Get Request在Application結束前,都會使用相同的instance
Transient:每次注入都會建立新的instance
Singleton:應用程式從開始到結束,使用的都是同一個instance。(ex:執行應用程式後,會先進入Program,接著執行Post/Get Request,接著再執行一次Post/Get Request。這種情況使用的都是同一個Service實體。第二次Post/Get Request不會再進入Program,不算Application結束)。
最近再使用Except()時,遇到個問題。明明他的功能就是要幫我們找出a有b沒有的資料,但結果卻一直跑出a已經有了,b也有的重複資料,研究了一下發現問題還蠻有趣的,也可以順便回憶一下reference type跟value type的相關知識喔~
我們在寫程式時,通常會把設定寫在appsettings.json裡面,但是不同的開發環境會有不同的設定值(例如:檔案產出路徑…etc)。.Net預設會使用appsettings.json這個檔案的設定值,但如果我們有不同的組態設定檔時(例如:DEV. SIT. UAT. PRD)。我們就要分別先新增appsettings.DEV.json, appsettings.SIT.json,appsettings.UAT.json,appsettings.PRD.json,其中的DEV.SIT.UAT會對應到不同的環境變數(appsettings.{環境變數}.json),有了不同環境的設定檔後,下面會來教大家要如何在本機開發環境切換不同的設定檔來進行測試。
最近工作剛好有個自己從無到有建置一個專案的機會,自己也是第一次從無到有的自己建置一個專案,機會難得,紀錄一下整個過程,大致會有下列幾個主要步驟:
雖然現在的WebAPI大部分採用Token方式來驗證,但企業內部的話,大部分還是會直接採用Windows驗證。
最近開發新專案,剛好有使用到身分驗證的相關功能,趁這次機會把.Net 的身分驗證相關問題紀錄一下。
網頁功能最常用的就是資料間的傳遞,不管事表單資料傳送到後台,或者是輸入查詢資料後,由後端DB回傳資料。這之間都少不了傳輸資料到後台。
在以前MVC的時候,可以透過Razor語法的HTML Helper的BeginForm,在Submit之後,會透過ModelBinding把資料傳到後端Controller。
或是在View直接把整個Form序列化(serilizeArray)後再傳給後端。
現再寫前後分離(Angular + .Net 6 WebAPI)採用WebAPI來開發,剛完成第一個前後分離專案,順便把資料傳送到Controller的方式記錄下來。
撈取DB資料時,如果是單一資料來源的話,直接使用EF Core是很方便。但更多時候資料來源是多張表單,Join完之後又要Group By,好了之後再把結果拿去Join其他表,或是再做子查詢。像這種時候如果沒有寫成View而是直接用Lambda或是LinQ語法來兜的話,實在是寫得很痛苦。以我來說,只要是查詢語法比較複雜的話我都習慣直接下SQL語法,再用自定義類別來接查詢結果。
記得以前在.Net Framework的時候,做法好像沒有這麼複雜,.Net Core會比較複雜一點,以下是使用PostgreSQL來實作,但使用MS SQL應該也不會差太多。
另外附上以前.Net Core3使用ADO.Net的方式
.Net 5建立Angular範本專案
用Visual Studio Code建立.Net Core WebAPI專案
用Visual Studio Code建立.Net Core Console專案
.Net Core其實也可以使用.Net Framework時期那種ADO.Net的寫法
只是取連線字串的方式有點不同。其他步驟都大同小異
流程大致如下:
1.於建構子注入IConfiguration。之後就可以用實作GetValue取得appsettings.json裡的連線字串
2.下SQL做查詢,並用SqlDataAdapter接資料並塞進DataSet
3.把DataRow跟Model做Mapping。傳到View時就可以用強型別寫Razor語法