Web/Api 專案統一錯誤處理
首先建立一個新的類別 ErrorHandlingFilter
繼承 ExceptionFilterAttribute
並複寫 OnException
函數
1 | public class ErrorHandlingFilter : ExceptionFilterAttribute |
在 Program.cs 中注入
1 | builder.Services.AddControllers(options => { options.Filters.Add(new ErrorHandlingFilter()); }); |
專案更改 Root Namespace
預設會使用專案名稱作為整個專案的 Root Namespace,
但是我們可以在 csproj 檔中設定 RootNamespace
讓它與專案名稱有所差異
1 | <Project Sdk="Microsoft.NET.Sdk.Web"> |
Nuget
add nuget registry
1 | dotnet nuget add source <registry url> -n SourceName -u UserName -p Password --store-password-in-clear-text |
pack
1 | dotnet pack -o <output folder> -c NUGET --no-dependencies --force -p:PackageVersion=<version> |
push
1 | dotnet nuget push -s SourceName <Packed Version> |
建立共用的 HttpClient
在 Program.cs 中註冊
1 | builder.Services.AddHttpClient("ThirdService", (provider, client) => |
再透過 HttpClientFactory 具名取用
1 | public MyService(IHttpClientFactory httpClientFactory) |
最小化 Docker Image
這一種被稱為 Multiple Stage Builds 的 Docker 技巧,
主要的概念是將建置(Build)與部署(Deploy)的步驟分開,
最終只部署出營運所需的映象檔(Image)。
比如說下面的 Docker File
就是將 dotnet 專案作了兩步驟的處理
此外,如果我們更換適當的 Image,
比如說,在 Create Runtime Image Step,
將 mcr.microsoft.com/dotnet/aspnet:6.0
改為 mcr.microsoft.com/dotnet/aspnet:6.0-alpine
映象檔的 Size 將減少 46.6% (216.11 MB → 115.4 MB)
1 | # Build Step |
參考
(fin)