雖然 .NET (C#) 與 Java 是兩個不同的語言,但這兩個都是 OOP 物件導向程式架構,而且 Java 出現的比較早,我們在 .NET 裡面也經常看到很多 Java 的影子,所以其實有不少相似之處。這篇文章我打算整理一下最近的感受,把一些常見的技術名詞與抽象概念做一些對照,幫助想要成為「斜槓青年」的朋友入門。
... 繼續閱讀 ...
我上周在 精通 OAuth 2.0 授權框架 課堂上示範 Facebook 的 OAuth 2.0 如何進行實作,結果過程中不小心啟用一個進階設定中的需要應用程式密鑰(Require app secret)選項,結果導致我在拿到 Access Token 之後竟然無法成功呼叫任何 Graph API。在我詳細研究之後,發現這個選項確實可以很好的增強 Access Token 使用的安全性,這篇文章我將來說明這個選項的來龍去脈,讓大家知道這個選項的確切用法。
... 繼續閱讀 ...
我最近因為支援 Quicktype 開源專案,新增了 System.Text.Json (C#) 的程式碼產生器功能,因此更加理解 System.Text.Json 的 Converter 撰寫方式。在這之前,我其實我都還是偏好使用 Newtonsoft.Json (俗稱 Json.NET
) 來進行 JSON 的序列化/反序列化工作,原因就在於 Json.NET 有很多「方便」又「豐富」的功能與特性在 System.Text.Json
都找不到,因此剛入門 System.Text.Json
的人一定會覺得綁手綁腳,很多原本能動的 Code 都不能 Run 了。今天這篇文章,我打算來分享如何讓 System.Text.Json
支援 dynamic 動態型別,讓你可以用「弱型別」的方式操作靈活的 JSON 資料。
... 繼續閱讀 ...
在 .NET 的世界裡,從 .NET Framework 4.0 問世之前,你只能使用 Thread、APM (Asynchronous Programming Model) 或 EAP (Event-based Asynchronous Pattern) 開發非同步程式碼,其實對不熟悉非同步開發的人來說,是有一點小小的進入門檻。但從 .NET Framework 4.0 開始推出的 TAP (Task-based Asynchronous Pattern) 這種以 Task 為基礎的非同步模式,不但可以透過 async/await 大幅簡化非同步開發的思維模式,還能產生更容易閱讀、好維護的程式碼。今天這篇文章,我將介紹 .NET Core 2.0 搭配 C# 7.0 推出的一個 ValueTask<TResult> 結構,並說明他跟 Task<TResult> 類別的不同之處!
... 繼續閱讀 ...
Entity Framework Core 讓你可以透過「導覽屬性」快速的取得「關聯」資料,不過方便的背後可能會犧牲一些效能,早期在 Entity Framework 的年代,預設啟用「延遲載入」機制,這個預設值可能會導致許多意外的效能問題,以致於 "Entity Framework 很慢" 的臭名一直延續至今,即便 Entity Framework Core 已經沒有這個問題,許多初學者還是不太清楚如何正確的使用 Entity Framework Core 來存取關聯資料。這篇文章我就來說說 Entity Framework Core 提供的三種關聯資料載入策略,以及如何判斷何時該用哪種策略載入資料。
... 繼續閱讀 ...
我們在使用 .NET CLI 開發專案的時候,經常會需要安裝一些 .NET 全域工具 (.NET Global Tool),但是安裝全域工具有個小缺點,那就是這些工具會需要被註冊到 PATH
環境變數中,而且經常會有與 .NET SDK 版本不一致的問題。我在授課的時候,學員就遇過好幾次 dotnet-ef 套件跟 .NET SDK 版本不一致,導致出現靈異事件的狀況。今天這篇文章,我就來跟大家說一下如何將這些 .NET 全域工具 改裝成 .NET 本地工具!
... 繼續閱讀 ...
我們公司採用 Microsoft 365 辦公協作環境,這也意味著背後一定使用了 Azure AD 目錄服務,因此我們可以直接拿 Azure AD 作為公司的 OAuth 2.0 + OpenId Connect (OIDC) 認證與授權平台,因此開發公司內部應用程式就變的非常容易。這篇文章我將說明要將一個 ASP.NET Core 網站加入 Azure AD 的身份驗證流程,以及使用時的注意事項。
... 繼續閱讀 ...
我們在建立含有 Query String 網址時,若是用字串串接的方式來實作,程式碼會相對的比較醜一點。從 ASP.NET Core 1.0 開始,就有好幾個專門用來建立 Query String 的類別,這些類別不但可以提升程式碼的可讀性,所有的 Query String 也都會進行必要的 URL Encode 動作,讓你的網址更符合國際標準,建議可以多加利用。
... 繼續閱讀 ...
LINQPad 有三個資料夾,預設放在使用者目錄的「我的文件」目錄下(~/Documents
),分別是 LINQPad Plugins
, LINQPad Queries
, LINQPad Snippets
這三個。為了讓我的筆電與家中電腦可以同步這些資料,我特別將這幾個資料夾移至 Dropbox 共享資料夾中,然後透過 Symbolic Link 連結回去,如此一來我就不用特別調整 LINQPad 設定,我只要調整每台電腦的資料夾與連結設定,就可以很方便的讀取到同步後的 LINQPad 完整設定與資料。
... 繼續閱讀 ...