矛魚盾

DataAnnotations 簡介

DataAnnotations 簡介 DataAnnotations 是 NET 內建的驗證器,是相當老牌的驗證器,時至今日,依然有新功能不斷添加近來,使用上也相當簡單。只是自從使用 FluentValidation 後,就漸漸少用,趁著整理 FluentVaildation,順便水一篇文章同時做個紀錄並與 FluentValidation 做對照。 1 2 3 4 5 6 7 8 9 public class CreateWeatherForecastRequest { public string Nation { get; set; } public string City { get; set; } public int TemperatureC { get; set; } public string Summary { get; set; } public DateTime StartTime { get; set; } public DateTime EndTime { get; set; } } 撰寫驗證 內建驗證語法 使用內建的驗證器,好處即是不用安裝,並且若是撰寫 MVC 專案,則 Razor Page頁面可搭配jquery.

FluentValidation 簡介

FluentValidation 簡介 FluentValidation 是一套驗證套件,可以將驗證以口語化的方式呈現,除了靈活性高,易於客製性化,也可以將驗證邏輯與業務邏輯分離,讓各自程式碼更加簡潔。 拿微軟內建的天氣預報,添加一些變化來當範例,輸入某時間段某地的溫度,如:台灣台北下午1點至3點,27度。 1 2 3 4 5 6 7 8 9 public class CreateWeatherForecastRequest { public string Nation { get; set; } public string City { get; set; } public int TemperatureC { get; set; } public string Summary { get; set; } public DateTime StartTime { get; set; } public DateTime EndTime { get; set; } } 假設在新增天氣時,為了資料能正確填寫,需要針對輸入的欄位進行檢查,如 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [HttpPost] public async Task<IActionResult> CreateWeatherForecast( [FromBody] CreateWeatherForecastRequest request) { if (string.

CQRS(一)

CQRS(一) CQRS 已經使用一陣子了,從接觸到專案正式使用,也經過不少風雨,趁現在比較有空,來整理一下學習過程。 CQRS(命令查詢職責分離,Command Query Responsibility Segregation)是一種軟體架構模式,用於將讀取和寫入操作分離。這種模式通常應用於複雜的系統中,以提高可擴展性和效能。在CQRS中,命令(Commands)用於執行寫入操作,而查詢(Queries)則用於執行讀取操作。透過將這兩種操作分開處理,可以針對不同的需求進行優化和擴展。 前言 關於 MediatR CQRS 在C#實作上通常與 MediatR 放在一起,但事實上也不一定要使用 MediatR 才能使用,雖然打算寫系列文章,但其實每篇都是獨立的,沒有強制一定要在專案導入第三方插件,依賴越多,對專案不一定是好事。 關於 DDD(domain-driven design) 另外 CQRS 大部分也與 DDD 掛勾,但這邊也不是討論DDD的內容,僅是一步一步實現 CQRS 架構的文章,所以內容僅停留在 Application 層為主。 關於 RESTful API RESTful API 其實可以視為 CQRS 架構的一種,HttpGet對應 Query,HttpPost、HttpPut、HttpDelete等對應 Command,但我認為這並不是絕對的,例如帳密查詢,有些情況下,會使用Post 作為傳送資料,另外有些查詢帳密會寫額外的紀錄,如限定搜尋次數等,這部分或許用命令Command,在語意上更加符合意境。 建立命令 Command 和查詢 Query 介面 CQRS 的核心思想是將資料的讀取和寫入分開處理,並使用不同的模型來處理這兩種操作。這樣可以使系統更加靈活,並且可以根據不同的需求進行優化和擴展,所以第一步就是先將命令和查詢分開,並且建立對應的介面。 1 2 3 4 5 6 7 8 public interface ICommandHandler<TCommand> where TCommand : class { Task<bool> Execute(TCommand command); } public interface ICommand { } 1 2 3 4 5 6 7 8 public interface IQueryHandler<in TQuery, TResult> where TQuery : IQuery<TResult> { Task<TResult> Execute(TQuery query); } public interface IQuery<TResult> { } 實作 Command 我們直接使用微軟內建的天氣預報來作範例,並加入國家與城市,所有的命令都實作ICommand

Vue 和 ASP.NET Core Web API 專案整合(二)

Vue 和 ASP.NET Core Web API 專案整合(二) 前一篇介紹WebApi與Vue兩個專案放在一起的架構。這篇介紹另一種架構,同一個方案底下,但分成Vue專案及Web Api專案兩個專案。 同樣不使用Vue範本,一切均使用內建為主,逐步建立前後端分離的專案。 與前篇相同的部分,會盡快帶過,節省時間與版面,如果造成不清楚的部分,請再來信告知。 專案架構 環境介紹 .NET Core 6 Vite 步驟一:創建 Vue 專案 新增專案,選擇 JavaScript 語言(或者選擇TypeScript),因為是使用 Vite 方式新增 Vue 專案,所以任選一個輕量型作為起始點即可。 如果是使用 Vue Cli 方式,可以選擇內建的 獨立JavaScript Vue專案、Vue與ASP.NET Core 在專案內使用終端機指令,執行 Vite 指令 1 npm create vite@latest my-vue-app -- --template vue 將原本專案內的檔案全部刪掉,把 my-vue-app 資料夾內的檔案,移至外層,移除不需要的空資料夾 先執行 npm install 安裝Vue相關依賴 步驟二:創建 ASP.NET Core Web API 專案 新增 WebApi 專案 調整一下 Controllers 內的API 步驟三:執行測試 這邊跟整合(一)內容是一樣的,同樣是,先查看 ASP.NET Core Web API 專案中 launchSettings.

Vue 和 ASP.NET Core Web API 專案整合(一)

Vue 和 ASP.NET Core Web API 專案整合(一) Vue 是一個流行的 JavaScript 框架,它可以協助開發者快速開發單頁應用程式。而 ASP.NET Core Web API 則是一個開發 Web API 的框架。在開發 Web 應用程式時,Vue 和 ASP.NET Core Web API 的整合十分常見。 網路上,已有不少大神,製作整合範本,下載即可使用,只是這類專案需要依賴維護,版本也不一定是自己想要的,所以寫了幾篇常見的架構,並且均以內建的專案為主,下面將介紹 Vue 和 ASP.NET Core Web API 專案整合的步驟。 常見的專案架構大概可以分幾種,各自架構都有不同的優缺點 WebApi 與 Vue 位於同一個專案(本篇介紹) WebApi 與 Vue 各自不同專案,但同一個方案底下 專案架構 環境介紹 .NET Core 6 Note 💡 .NET Core 3 以下,可能要額外安裝 AspNetCore.SpaServices.Extensions,在Program.cs,也會有不同的設定 Vite 步驟一:創建 ASP.NET Core Web API 專案 首先,需要創建一個 ASP.NET Core Web API 專案。這邊我習慣從空白方案開始,比較容易命名不同的專案用途。 加入 ASP.

使用 HttpClient Post file、XML、Json 等各種HttpContent資料

使用 HttpClient Post file、XML、Json 等各種HttpContent資料 Content-Type 常見的四種格式 application/x-www-form-urlencoded、multipart/form-data、application/json、application/xml,我們需要新增對應的 HttpContent實例,才能透過 HttpClient來傳送資料 Json格式,使用 StringContent 對應 application/json 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 async Task Main() { var client = new HttpClient(); // 目前最常見的 Json 格式 IDictionary<string, string> data = new Dictionary<string, string> { { "Name", "王小明" }, { "Mobile", "0912345678" }, }; var jsonFormat = JsonConvert.SerializeObject(data); HttpContent contentPost = new StringContent(jsonFormat, Encoding.UTF8, "application/json"); var response = await client.