寫Web API時最討厭遇到500 (Internal Server Error)這種後端程式錯誤了,只返回一個Error Responese,c#的catch也抓不到錯誤訊息。由於不是本機環境,也沒有辦法下中斷點Debug,所以也不知道該如何除錯,這時候就知道紀錄後端Log的重要性了。
之前使用的原本是ElmahCore,但爬文後,發現Serilog的使用率比較高,相關資料也比較多。
寫Web API時最討厭遇到500 (Internal Server Error)這種後端程式錯誤了,只返回一個Error Responese,c#的catch也抓不到錯誤訊息。由於不是本機環境,也沒有辦法下中斷點Debug,所以也不知道該如何除錯,這時候就知道紀錄後端Log的重要性了。
之前使用的原本是ElmahCore,但爬文後,發現Serilog的使用率比較高,相關資料也比較多。
.Net 7 Open API Swagger設定
Linux Ubuntu實際架站(.Net WebAPI + Angular)範例
當我們透過HttpClient要調用API時,Model Binding是一個重要的東西。要給API的參數可以來自URL網址參數,可以以來自網址路由,可以來自表單。
如果是POST的話,資料則是可以放在Body裡面。
這篇文章整理了一些比較常見的傳輸參數的作法。
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語法