The Will Will Web

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

如何在 .NET Core / .NET 5+ / ASP.NET Core 正確使用 Big5 編碼

由於從 .NET Core 1.0 開始,就沒有自動載入 BIG5 編碼的 Encoding 資料,所以你沒辦法直接透過 Encoding.GetEncoding("Big5") 取得 Encoding 物件。在 .NET Core 3.1 之前,還需要須額外安裝 System.Text.Encoding.CodePages 套件才行。不過,從 .NET 5 開始,這個套件成為了 .NET SDK 的一部分,不再需要額外安裝。但即便如此,你還是要特別執行一段註冊以使用此編碼。接下來,我們將深入探討如何註冊這些編碼並正確使用它們在不同的場景中。

... 繼續閱讀 ...

撰寫不用 async await 的 C# 非同步方法並使用 Unwrap 方法簡化程式碼

BenchmarkDotNet 實測驗證發現,只要在現有的非同步方法加上 async/await 關鍵字,其方法的執行效能就有可能會降低 2,700 倍之多。這是因為 async/await 關鍵字會讓 C# 編譯器在編譯程式時,會將非同步方法轉換成一種狀態機的實作,這樣的轉換會增加程式的執行時間。因此,我們在大多數「函式庫」中的程式碼,幾乎都不會使用 async/await 關鍵字來撰寫程式。然而我們在函式庫中實作程式時,是有可能遇到多次非同步等待的情況,此時我們就可以使用 TaskExtensions.Unwrap 擴充方法來簡化寫法,今天這篇文章我就來說說這個開發技巧。

... 繼續閱讀 ...

使用 C# 8.0 Async Streams 實現非同步串流 ASP.NET Core Web API

C# 8.0 引入了一個 Async Streams (非同步串流) 的語言特性,這個特性讓我們可以做到許多以前做不到的事,若用在 ASP.NET Core Web API 上面,你就可以很輕鬆的實現 API 資料串流功能,讓你可以透過「非同步」的方式有效率的處理大量資料。由於這個概念太過前衛,所以我們先從基本的語法開始,然後再來看看如何應用在 ASP.NET Core Web API 上面。

... 繼續閱讀 ...

如何透過 LINQPad 撰寫自動化作業並搭配 CI 自動執行

我現在大多數自動化的小工具都是使用 LINQPad 來撰寫,執行速度快且管理方便,但是在 CI/CD 環境中,LINQPad 並不是一個常見的工具,還好 LINQPad 有提供 LPRun 工具,可以直接把現成的 *.linq 檔案直接拿來當成腳本執行,因此拿來 CI 的環境用是非常方便的,完全可以當作 C# 腳本來使用。這篇文章我就來介紹一下 LPRun 使用的方式。

... 繼續閱讀 ...

取得 .NET 8 應用程式的版本資訊必須注意的兩三事

我前陣子幫客戶開發一個 Windows Forms 應用程式,使用 .NET 8 來開發,不過在案子的最後一刻,客戶要求要加上一個「版本資訊」的功能,這個功能要顯示目前程式的版本號。這個功能實在是不常寫,沒想到還真的有點地雷,因為跟 .NET Framework 有點不太一樣了。這篇文章就來分享一下我在開發過程中遇到的問題,以及解決方法。

... 繼續閱讀 ...

如何攔截並記錄 HttpClient 發出的所有 HTTP Request 與 Response 資料

在 .NET 要呼叫 REST API 時,最常使用的就屬 HttpClient 類別莫屬,但有時候真的想看他到底送出了什麼 HTTP 封包,或是收到了什麼 HTTP 回應 (原始內容),這時候就需要一個方法來攔截並記錄實際 HTTP 傳送的 Request 與 Response 封包內容。其實是有方法的,這篇文章就來介紹如何實作。

... 繼續閱讀 ...

使用 .NET 8.0 與 Azure Functions Core Tools 開發與部署函式應用程式

我一直以來都是 Serverless 架構的信徒,因為實在是不太想自己管伺服器,我從 2018 年就開始採用 Azure Functions 技術,到目前為止歷經了 4 個大版本,到現在終於算是穩定些了。不過即便到目前為止,你要是照著官方文件下去設定,肯定會在很多不同的環節鬼打牆,地雷一直都沒有少過。這篇文章我將介紹如何使用 .NET 8.0Azure Functions Core Tools 來開發函式應用程式,並說明如何部署應用程式到 Azure App Service 使用 Consumption Plan (Y1) 方案來執行!

... 繼續閱讀 ...

如何使用 .NET 的 Azure AI Vision SDK 來替程式加上「視覺」功能

我最近寫了一個小程式,幫助我自動化審核 LINE 社群(OpenChat)的加入申請,由於 LINE 社群並沒有提供 API 可以串接,而我的審核數量又非常大,因此我就想到了透過 OCR 辨識的方式來進行自動化。不過找了幾個免費的 OCR 套件,都沒有辦法很可靠的識別截圖中的文字,直到我嘗試了 Azure AI Vision 服務才眼睛為之一亮,這套產品的 Image analysis 功能品質極高,費用也極低,實際開發出東西後,我覺得這個服務真的非常值得推薦給大家。這篇文章我就帶大家用 .NET 8 簡單上手這個好用的雲端服務!

... 繼續閱讀 ...

如何在 VS Code 順利啟用測試總管 (Test Explorer) 測試 .NET 應用程式

我最近在嘗試使用 GitHub Copilot 來撰寫單元測試,而在使用的過程中,我發現 Visual Studio Code 的測試總管 (Test Explorer) 竟然抓不到我專案中的測試案例,研究了一下才發現是 .NET Core Test Explorer 沒有正確設定導致的。不過,其實 C# Dev Kit 擴充套件本來就內建了 C# 的測試轉接器 (Test Adapter),不需要 .NET Core Test Explorer 就能跑,索性我就把套件刪除了。今天這篇文章我就來分享如何設定讓 C# Dev Kit 能夠正確的啟用測試總管 (Test Explorer),方便我們執行單元測試。

... 繼續閱讀 ...