2025/01/24
[Azure] ASP.NET Core 專案部署到 Web App for Containers 問題除錯心得
markdown
### 前言
因為新專案要求要用 Docker,本地開發端的問題通常不大,開專案也都有 Template,往往都是實際要部署上線時會遇到一些狀況。
趁著記憶猶新,整理一下部署心得
### 開發環境
- Windows 11
- Docker Desktop v4.37.1
- Visual Studio 2022 (v17.11.x -- 原版本忘了,因部署 Bug 問題,後來升級到 v17.12.4)
- ASP.NET Core Web App (Model-View-Controller) 專案
- .NET 8.0
### 選擇部署到 Azure 的服務
將專案部署到 Azure 上,我選擇的服務如下:
- Azure Container Registry (ACR)
- Azure App Service (Web App for Containers)
- Azure SQL Database
- Azure Storage
2025/01/23
[ASP.NET Core] 解決 ASP.NET Core 在 Linux Container 出現無法載入 libSkiaSharp 相依性問題
markdown
### 前言
一直以來開發的 ASP.NET Core 專案都是在 Windows 環境執行。最近才開始接觸開發 ASP.NET Core 專案執行於 Docker Container 的開發環境,馬上就遇到處理圖片的問題。
在 Windows 的環境下處理圖片會用到 `System.Drawing.Common`,但在 Linux 環境下是不支援的。所以在 Linux 下的圖片處理改採用 `SkiaSharp` 的套件。
SkiaSharp 這個套件在 Windows 及 Linux 都可以用,在 Windows 的開發環境已有測試套過可以正常運作,沒想到在 Linux 環境下還是噴錯了。
### 環境
- Docker Container (預設 ASP.NET Core 專案用的 base 我改用 `aspnet:8.0-jammy-chiseled` 可減少 image size)
- .NET 8.0
- NuGet 安裝套件: SkiaSharp 版本 3.116.1
### 問題
而在使用 SkiaSharp 處理圖片的過程中出現以下錯誤訊息:
```
An unhandled exception occurred while processing the request.
DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies.
```
### 解決方式
需要再安裝 `SkiaSharp.NativeAssets.Linux.NoDependencies` 套件
特此記錄一下,供未來翻查用
2025/01/10
[Docker] 解決 permission denied 的問題
markdown
### 問題
在 Ubuntu VM 安裝 Docker 後執行 `docker info` 遇到 permission denied 的問題
錯誤訊息:
```
ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.47/info": dial unix /var/run/docker.sock: connect: permission denied
errors pretty printing info
```
### 解決方法
參考連結: [https://stackoverflow.com/questions/48957195/how-to-fix-docker-got-permission-denied-issue](https://stackoverflow.com/questions/48957195/how-to-fix-docker-got-permission-denied-issue)
指令步驟:
1. 建立 docker 群組 (若不存在的話)
2. 加入自己的帳號至 docker 群組
3. 以群組 docker 的身份登入 (無需登出再登入)
```
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```
2024/10/24
[ASP.NET MVC] 解決在 WebAPI 讀取不到 Session 值的問題
markdown
### 環境
- ASP.NET MVC 5
- .NET Framework 4.7.2+
### 問題
原本有個設定值以 Cookie 為存取來源, 但因應安全理由改寫成 Session 來存取, 卻在 WebAPI 存取時發生讀取不到 Session 的內容。
在 ASP.NET Core MVC 反而簡單, 只要 `services.AddSession()` 跟 `app.UseSession()` 即搞定。
目前還是有許多不是 .NET Core 的專案,記錄一下以供未來翻查用。
### 解決方法
修改 `Global.asax.cs` 檔案
```cs
protected void Application_PostAuthorizeRequest()
{
// WebApi SessionState
bool isWebApiRequest = HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.StartsWith("~/api");
if (isWebApiRequest) HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
}
```
### 參考資料
- [Accessing Session Using ASP.NET Web API](https://stackoverflow.com/questions/9594229/accessing-session-using-asp-net-web-api)
2024/06/18
[C#][WebAPI] Json.NET / System.Text.Json 序列化物件中忽略 null 值的屬性
markdown
近期遊走在 ASP.NET MVC 5 / Web API 2 以及 ASP.NET Core MVC (.NET) 的專案中
對於由 API 讀取進來的物件在 .NET Framework 與 .NET 下處理的方式不同, 需要記錄一下以便日後翻查
場景需求
使用場景是把接收進來的物件內容轉換做一個清洗,只要從 Web API 接進來的物件屬性值為 null 的都不保留 例如: 有一個 Log 物件如下 ```C# var log = new Log { Timestamp = "2024-06-16T09:22:01.5120098Z", Level = "Information", Message = "This is test message", Exception = null }; ``` 那麼經過清洗過後的字串內容就不會包含 Exception 空值的屬性 ```Json { "Timestamp":"2024-06-16T09:22:01.5120098Z", "Level":"Information", "Message":"This is test message" } ``` 以下即是在 ASP.NET MVC 5 及 ASP.NET Core 不同環境的處理方式2024/03/31
[.NET] 如何在 ASP.NET Core 的專案整合 Vite 開發
markdown
### 前言
之前大多使用 Laravel 搭配 Vite 來做前端資源整合開發,由於 Laravel 生態系非常完整,也不太需要多做太多設定即可整合完成。
近期在 ASP.NET Core MVC 的專案使用 Vite 開發前端資源檔案,使用上卻不是那麼上手。尤其是在開發時期載入檔案的部分,在 Laravel 用 @vite 卻可輕易完成,便尋尋覓覓找到相近的整合套件。
2024/03/16
[Vite] 前端開發模擬 API 的好物 Mock Service Worker (MSW)
markdown
### 前言
網站開發階段,常常會遇到前端開發時需要模擬呼叫 API 的情境。
用 json-server 來起一個服務是方便測試,但是跟網站是分開的 server,可能會因為忘記把服務開啟而呼叫失敗。
在不用後端介入的情境下,前端用 Vite 整合 Mock Service Worker (MSW) 模擬客製回應是個不錯的選擇。
訂閱:
文章 (Atom)