dotnet6 Serilog範例

目的 在webapi專案下使用serilog套件 建立新專案 選擇ASP.NET Core Web API專案範本,並執行下一步 設定新的專案 命名你的專案名稱,並選擇專案要存放的位置。 其他資訊 直接進行下一步 NuGet加入套件 Serilog.AspNetCore 編輯Program.cs檔 在最外層包一個try catch目的是為了捕捉啟動階段的錯誤 using Serilog; using Serilog.Events; Log.Logger = new LoggerConfiguration() //Serilog要寫入的最低等級為Information .MinimumLevel.Information() //Microsoft.AspNetCore開頭的類別等極為warning .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning) //寫log到Logs資料夾的log.txt檔案中,並且以天為單位做檔案分割 .WriteTo.File("./Logs/log.txt", rollingInterval: RollingInterval.Day) .CreateLogger(); try { Log.Information("Starting web host"); var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); //controller可以使用ILogger介面來寫入log紀錄 builder.Host.UseSerilog(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run(); return 0; } catch (Exception ex) { Log....

October 7, 2022

dotnet6 EFCore語法說明

目的 說明EFCore基本語法,EFCore的基礎為Linq,所以使用上與Linq邏輯一模一樣,只是語法有些微差異。 建立新專案 選擇ASP.NET Core Web API專案範本,並執行下一步 設定新的專案 命名你的專案名稱,並選擇專案要存放的位置。 其他資訊 直接進行下一步 NuGet加入套件 Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Design 新增Student.cs類別檔 新增Models資料夾,並在裡面新增Student.cs類別檔 編輯Student.cs類別檔 public class Student { public int Id { get; set; } public string Name { get; set; } = "BillHuang"; public int Age { get; set; } } 新增EFCoreContext.cs類別檔 新增DBContext資料夾,並在裡面新增EFCoreContext.cs類別檔 編輯EFCoreContext.cs類別檔 //別忘了using using Microsoft.EntityFrameworkCore; using EFCoreExample_Advanced.Models; namespace EFCoreExample_Advanced.DBContext { //繼承DbContext public class EFCoreContext : DbContext { //複寫OnConfiguring protected override void OnConfiguring(DbContextOptionsBuilder options) { //指定連線字串,連到SQLite options....

October 5, 2022

dotnet6 EFCore範例

目的 透過EFCore對db做查詢,為了降低門檻採用SQLite當範例資料庫。 建立新專案 選擇ASP.NET Core Web API專案範本,並執行下一步 設定新的專案 命名你的專案名稱,並選擇專案要存放的位置。 其他資訊 直接進行下一步 NuGet加入套件 Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Design 新增Student.cs類別檔 新增Models資料夾,並在裡面新增Student.cs類別檔 編輯Student.cs類別檔 public class Student { public int Id { get; set; } public string Name { get; set; } = "BillHuang"; public int Age { get; set; } } 新增EFCoreContext.cs類別檔 新增DBContext資料夾,並在裡面新增EFCoreContext.cs類別檔 編輯EFCoreContext.cs類別檔 //別忘了using using Microsoft.EntityFrameworkCore; using EFCoreExample.Models; namespace EFCoreExample.DBContext { //繼承DbContext public class EFCoreContext : DbContext { //複寫OnConfiguring protected override void OnConfiguring(DbContextOptionsBuilder options) { //指定連線字串,連到SQLite options....

October 4, 2022

dotnet6 Dapper語法說明

目的 說明Dapper基本語法 建立新專案 選擇ASP.NET Core Web API專案範本,並執行下一步 設定新的專案 命名你的專案名稱,並選擇專案要存放的位置。 其他資訊 直接進行下一步 NuGet加入套件 Dapper Microsoft.Data.Sqlite 編輯WeatherForecastController檔案 將預設的API註解 基本設定 /// <summary> /// 初始化SQLite /// </summary> /// <returns></returns> private static async Task InitSqliteAsync() { //建立SQLite連線 using var conn = new SqliteConnection("Data Source=Student.sqlite"); var SQL = new StringBuilder(); //判斷是否有Student.sqlite檔案 if (!System.IO.File.Exists(@".\Student.sqlite")) { //新增一張表,就會建立.sqlite檔案 SQL.Append("CREATE TABLE Student( \n"); SQL.Append("Id INTEGER PRIMARY KEY AUTOINCREMENT, \n"); SQL.Append("Name VARCHAR(32) NOT NULL, \n"); SQL.Append("Age INTEGER) \n"); //執行sql語法 await conn.ExecuteAsync(SQL.ToString()); } //Task不建議使用void,當不需要回傳值時會改用Task....

October 3, 2022

dotnet6 Dapper範例

目的 透過dapper對db做查詢,為了降低門檻採用SQLite當範例資料庫。 建立新專案 選擇ASP.NET Core Web API專案範本,並執行下一步 設定新的專案 命名你的專案名稱,並選擇專案要存放的位置。 其他資訊 直接進行下一步 NuGet加入套件 Dapper Microsoft.Data.Sqlite(微軟官方還是SQLite官方?黑暗執行緒前輩有做說明,我的選擇比較單純有微軟用微軟) 編輯WeatherForecastController檔案 將預設的API註解 寫新的對外API /// <summary> /// 檢查有沒有sqlite檔案,沒有就新增,並增加一筆資料 /// </summary> /// <returns></returns> [HttpGet("InsertAsync")] public async Task<IActionResult> InsertAsync() { //連接sqlite資料庫 using var connection = new SqliteConnection("Data Source=Student.sqlite"); var SQL = new StringBuilder(); //當找不到sqlite檔案時,建立新表,新表創建後就會產生sqlite檔案了 if (System.IO.File.Exists(@".\Student.sqlite")) { //組語法,新建名為Student的表 SQL.Append("CREATE TABLE Student( \n"); //Id欄位設定數字型別為PKey,並且自動遞增 SQL.Append("Id INTEGER PRIMARY KEY AUTOINCREMENT, \n"); //Name欄位設定為VARCHAR(32)不允許是null SQL.Append("Name VARCHAR(32) NOT NULL, \n"); //Age欄位設定為int SQL.Append("Age INTEGER) \n"); //執行sql語法 await connection....

October 2, 2022

dotnet6 EPPlus圖表範例

目的 使用epplus製作長條圖 建立新專案 選擇ASP.NET Core Web API專案範本,並執行下一步 設定新的專案 命名你的專案名稱,並選擇專案要存放的位置。 其他資訊 直接進行下一步 NuGet加入套件 Epplus 設定appsetting檔案 為了避免LicenseException,故需要在appsetting加入下列文字 "EPPlus": { "ExcelPackage": { "LicenseContext": "Commercial" //The license context used } } 編輯WeatherForecastController檔案 將預設的API註解 寫新的對外API [HttpGet(Name = "Import")] public ActionResult ImportExcel() { //建立excel所有操作的實例 using ExcelPackage excelPackage = new(); var ws = excelPackage.Workbook.Worksheets.Add("第一頁"); Random Random = new Random(); //ws.Cells[上下(row),左右(col)] ws.Cells[1, 2].Value = "第一季"; ws.Cells[1, 3].Value = "第二季"; ws.Cells[1, 4].Value = "第三季"; ws.Cells[1, 5].Value = "第四季"; ws.Cells[2, 1]....

October 2, 2022

dotnet6 EPPlus範例

目的 將資料匯出成excel 建立新專案 選擇ASP.NET Core Web API專案範本,並執行下一步 設定新的專案 命名你的專案名稱,並選擇專案要存放的位置。 其他資訊 直接進行下一步 NuGet加入套件 Epplus 設定appsetting檔案 為了避免LicenseException,故需要在appsetting加入下列文字 "EPPlus": { "ExcelPackage": { "LicenseContext": "Commercial" //The license context used } } 編輯WeatherForecastController檔案 將預設的API註解 寫新的對外API [HttpGet(Name = "Import")] public ActionResult ImportExcel() { //建立excel所有操作的實例 using ExcelPackage excelPackage = new(); //properties為excel的屬性,開啟excel後要特別去查看屬性才能看到的資訊 excelPackage.Workbook.Properties.Author = "Bill Huang"; excelPackage.Workbook.Properties.Title = "範例檔案"; excelPackage.Workbook.Properties.Created = DateTime.Now; //建立第一頁工作表(下方所顯示的頁簽) ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("第一頁"); int i = 1; foreach (var c in Summaries) { //選擇指定欄位將資料放入 worksheet....

October 1, 2022

dotnet6 更改回傳Json時為大駝峰命名

目的 將預設回傳的Camel-Case(temperatureCelsius)改為Pascal Case(TemperatureCelsius) 建立新專案 選擇ASP.NET Core Web API專案範本,並執行下一步 設定新的專案 命名你的專案名稱,並選擇專案要存放的位置。 其他資訊 直接進行下一步 編輯WeatherForecastController檔案 將預設的API註解,寫入新的Action,預設不會引用System.Text.Json,記得在最上面using /// <summary> /// 反序列化 /// </summary> /// <returns></returns> [HttpGet("JsonDeserialize")] public ActionResult JsonDeserialize() { var options = new JsonSerializerOptions { PropertyNamingPolicy = null, }; var jsonString = @"{""Name"":""中文名"",""Age"":18,""TemperatureCelsius"":52}"; var Result = JsonSerializer.Deserialize<TestClass>(jsonString,options); return Ok(Result); } public class TestClass { public string Name { get; set; } public int Age { get; set; } public int TemperatureCelsius { get; set; } } Program寫入程式 builder....

September 30, 2022

dotnet6 解決System.Text.Json序列化後會將所有非ASCII轉為Unicode

目的 序列化時不自動將非ASCII轉為Unicode 建立新專案 選擇ASP.NET Core Web API專案範本,並執行下一步 設定新的專案 命名你的專案名稱,並選擇專案要存放的位置。 其他資訊 直接進行下一步 編輯WeatherForecastController檔案 將預設的API註解,寫入新的Action,預設不會引用System.Text.Json,記得在最上面using [HttpGet("JsonSerialize")] public ActionResult JsonSerialize() { var options = new JsonSerializerOptions { //美化輸出,會有空白字元 WriteIndented = true, //將所有語言都不進行轉換 Encoder = JavaScriptEncoder.Create(UnicodeRanges.All) }; var Test = new TestClass() { Name = "中文名", Age = 18, }; var Result = JsonSerializer.Serialize(Test, options); return Ok(Result); } public class TestClass { public string Name { get; set; } public int Age { get; set; } } 執行結果 中文就不會是unicode了 參考 How to serialize and deserialize...

September 29, 2022

dotnet6 Text.Json範例

目的 不使用Newtonsoft.Json,改採.net6內建的System.Text.Json System.Text.Json更著重在效能與安全性,大多數人應該都跟我一樣只會使用基本的序列化及反序列化。 建立新專案 選擇ASP.NET Core Web API專案範本,並執行下一步 設定新的專案 命名你的專案名稱,並選擇專案要存放的位置。 其他資訊 直接進行下一步 編輯WeatherForecastController檔案 將預設的API註解,寫入新的Action,預設不會引用System.Text.Json,記得在最上面using /// <summary> /// 序列化 /// </summary> /// <returns></returns> [HttpGet("JsonSerialize")] public ActionResult JsonSerialize() { var Test = new TestClass() { Name = "中文名", Age = 18 }; var Result = JsonSerializer.Serialize(Test); return Ok(Result); } /// <summary> /// 反序列化 /// </summary> /// <returns></returns> [HttpGet("JsonDeserialize")] public ActionResult JsonDeserialize() { var jsonString = @"{""Name"":""中文名"",""Age"":18}"; var Result = JsonSerializer.Deserialize<TestClass>(jsonString); return Ok(Result); } public class TestClass { public string Name { get; set; } public int Age { get; set; } } 執行結果 點選Try it out 點選Execute 查看執行結果1(序列化) 查看執行結果2(反序列化) 延伸問題 在不做任何設定的情況下,內建的序列化會有些微差異...

September 28, 2022