The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

使用 C# 與 CsvHelper 套件解析《臺北市政府行政機關辦公日曆表》公開資料

最近在重寫我之前做的一個名叫「假日查詢系統」的小專案(side project),主要是給 Power Automate 與 Azure Logic App 呼叫的一個 Web API,因為我們我常把一些日常的工作自動化,經常需要判斷「當天」是否是放假日,藉此判斷式否要觸發工作,這才不會在一些特別的日子 Teams 還在亂叫。之前我是用 JSON 的 API 來介接,但這次我打算用 CSV 來當作主要資料源,箇中緣由請讓我娓娓道來。

... 繼續閱讀 ...

System.Text.Json 可使用 JsonSerializerDefaults.Web 處理常見的 JSON 格式

今天公司同事在用 .NET 處理一個系統串接需求時,發現對方傳來的 JSON 格式會把應該為「數值」的數字資料使用「字串」的格式來表達,這導致他在使用 System.Text.JsonJsonSerializer.Deserialize 進行反序列化時出現錯誤。這篇文章我來分享一個鮮為人知的小秘訣,讓你輕鬆駕馭各種 Web 常見的 JSON 格式。

... 繼續閱讀 ...

.NET 與 Java 常見技術名詞與抽象概念對照表

雖然 .NET (C#) 與 Java 是兩個不同的語言,但這兩個都是 OOP 物件導向程式架構,而且 Java 出現的比較早,我們在 .NET 裡面也經常看到很多 Java 的影子,所以其實有不少相似之處。這篇文章我打算整理一下最近的感受,把一些常見的技術名詞與抽象概念做一些對照,幫助想要成為「斜槓青年」的朋友入門。

... 繼續閱讀 ...

使用 appsecret_proof 增強從伺服器呼叫 Facebook Graph API 的安全性

我上周在 精通 OAuth 2.0 授權框架 課堂上示範 Facebook 的 OAuth 2.0 如何進行實作,結果過程中不小心啟用一個進階設定中的需要應用程式密鑰(Require app secret)選項,結果導致我在拿到 Access Token 之後竟然無法成功呼叫任何 Graph API。在我詳細研究之後,發現這個選項確實可以很好的增強 Access Token 使用的安全性,這篇文章我將來說明這個選項的來龍去脈,讓大家知道這個選項的確切用法。

... 繼續閱讀 ...

如何讓 System.Text.Json 支援 Dynamic 型別的序列化/反序列化

我最近因為支援 Quicktype 開源專案,新增了 System.Text.Json (C#) 的程式碼產生器功能,因此更加理解 System.Text.JsonConverter 撰寫方式。在這之前,我其實我都還是偏好使用 Newtonsoft.Json (俗稱 Json.NET) 來進行 JSON 的序列化/反序列化工作,原因就在於 Json.NET 有很多「方便」又「豐富」的功能與特性在 System.Text.Json 都找不到,因此剛入門 System.Text.Json 的人一定會覺得綁手綁腳,很多原本能動的 Code 都不能 Run 了。今天這篇文章,我打算來分享如何讓 System.Text.Json 支援 dynamic 動態型別,讓你可以用「弱型別」的方式操作靈活的 JSON 資料。

... 繼續閱讀 ...

如何在 ASP.NET Core 6 使用 Token-based 身份認證與授權 (JWT)

ASP.NET Core 6 提供了一組 Minimal APIs 可以大幅簡化啟動 ASP.NET Core 應用程式的程式碼,但由於註冊服務到 DI 容器的 API 被簡化了,因此程式的寫法有些差異。今天這篇文章,我打算重新撰寫 如何在 ASP.NET Core 3 使用 Token-based 身分驗證與授權 (JWT) 這篇文章,改以 ASP.NET Core 6 Minimal APIs 來進行實作。

... 繼續閱讀 ...

體驗全新 ASP.NET Core 6.0 專案範本與 C# 10 語言特性

我的 ASP.NET Core 6 開發實戰:從入門到進階 課程將在 2021/11/13 開始,就在 .NET 6.0 推出後 4 天。由於 .NET 6.0 與 C# 10 即將推出,全新的 Top-level statements 語言特性,可以大幅簡化 .NET 應用程式的啟動程式碼,這個變化自然也會影響到 ASP.NET Core 6.0 的啟動方式,許多 .NET Core 的老手看到全新的 Hosting Model (裝載模型) 可能會非常不適應,這篇文章主要用來解決大家的疑惑。

... 繼續閱讀 ...

ASP.NET 與 ASP․NET Core 偵測用戶端已斷線並自動取消非同步方法執行

我今天在「C# 開發實戰:非同步程式開發技巧」課程中有學員提問,如何偵測用戶端已斷線並自動取消非同步方法執行。事實上 ASP.NET (.NET Framework) 與 ASP.NET Core 的實作方式相當類似,今天這篇文章我就來分享 ASP.NET Core 的實作方式,幫助你有效偵測用戶端已斷線,並自動取消非同步方法執行。

... 繼續閱讀 ...

比對字串在不同程式語言的語法差異 (JS, C#, Java, Go)

今天同事提到一個問題,說他看到客戶用 JavaScript 的 <> 來比對日期字串,但我們要將這份邏輯移到後端 Java 應用程式中,由於 Java 沒看到類似的語法,雖然知道有 Java 字串有個 compareTo() 方法可用,但不知道差異在哪裡,也深怕有個未知的地雷會踩到。因為這個需求,我今天寫了 4 種不同程式語言的字串比對差異比較,看的懂程式碼的話,未來應該就知道這幾種語言字串比對的差異在哪裡了。

... 繼續閱讀 ...

使用 Json.NET 與 QuickType 搭配字串轉 Enum 的絕佳解決方案

我每次需要呼叫遠端 Web API 的時候,都會盡量使用強型別的方式建立模型類別,但我基本上都不自己寫 Code,而是透過工具從 JSON 直接轉成模型類別。雖然說方便歸方便,但難免還是會遇到惱人的地雷,今天這篇文章描述問題的份量會比解決方案來的多,請大家一步一步的看下去,就可以理解整個來龍去脈。

... 繼續閱讀 ...

新手上路 C# 原始碼產生器 (Source Generators)

最近迷上 C# 原始碼產生器 (Source Generators) 這門相當新穎的技術,跟以往常用的 T4 (Text Template Transformation Toolkit) 產生器技術不太一樣,這個 Source Generators 是屬於 Roslyn 編譯器的技術之一,讓你在專案建置的過程中,可以對正在編譯的 C# 原始碼進行增補,動態加入「額外」的原始碼,最後再編譯在一起,非常神奇又實用的技術,讓人非常有想像空間! 👍

... 繼續閱讀 ...

深入理解 C# 7.1 提供的 async 非同步 Main() 方法

我們在開發 .NET 應用程式的時候,預設選取的 C# 語言版本為「最新已發行主要版本」(latest major version),如果以 Visual Studio 2017 v15.9.10 來說,內建的 C# 最新發行版本就是 7.3 版,因此主要版本就是 7.0 版。本篇文章要來介紹 C# 7.1 提供的一個語法糖,它能讓你的 Console 應用程式,將主程式的進入點 Main() 方法也能宣告為非同步(async)的版本,好讓你從頭到尾都用非同步的方式開發應用程式,最後還會說明這個新語法背後的技術原理。

... 繼續閱讀 ...