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

dotnet6 swagger授權

目的 在swagger內使用jwt token測試API 建立新專案 選擇ASP.NET Core Web API專案範本,並執行下一步 設定新的專案 命名你的專案名稱,並選擇專案要存放的位置。 其他資訊 選擇.net6版本,支援OpenAPI支援一定要勾選,此選項.net5以後才會有,.net core 3.1並沒有此選項,需要從NuGet安裝,並點建立 專案基本設定 右邊紅框處專案檔點兩下,會開啟專案的xml檔案,額外加入兩行xml資料,目的是要透過編譯器產生文件檔案 <GenerateDocumentationFile>true</GenerateDocumentationFile> <NoWarn>$(NoWarn);1591</NoWarn> 加入前 加入後 編輯Program.cs檔案 修改program檔案內容,調整AddSwaggerGen的內容,目的是為了可以讀取我們所寫的註解 builder.Services.AddSwaggerGen(options => { // using System.Reflection; var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename)); }); 加入前 加入後 NuGet加入套件 透過NuGet安裝 JWT Microsoft.AspNetCore.Authentication.JwtBearer Microsoft.IdentityModel.Tokens System.IdentityModel.Tokens.Jwt 新增Helpers資料夾並在裡面新增JwtHelpers.cs類別檔案 jwt範例使用保哥範例來做修改,目的只是為了取得jwt token public class JwtHelper { private readonly JwtSettingsOptions _settings; public JwtHelper(IOptionsMonitor<JwtSettingsOptions> settings) { //注入appsetting的json _settings = settings.CurrentValue; } public string GenerateToken(string userName, int expireMinutes = 120) { //發行人 var issuer = _settings....

September 27, 2022

dotnet6 swagger範例

目的 每次要使用swaggerUI時候範例總是各式各樣,千奇百怪,下列範例是使用官方預設的Swashbuckle套件來教學。 建立新專案 選擇ASP.NET Core Web API專案範本,並執行下一步 設定新的專案 命名你的專案名稱,並選擇專案要存放的位置。 其他資訊 選擇.net6版本,支援OpenAPI支援一定要勾選,此選項.net5以後才會有,.net core 3.1並沒有此選項,需要從NuGet安裝,並點建立 專案基本設定 右邊紅框處專案檔點兩下,會開啟專案的xml檔案,額外加入兩行xml資料,目的是要透過編譯器產生文件檔案 <GenerateDocumentationFile>true</GenerateDocumentationFile> <NoWarn>$(NoWarn);1591</NoWarn> 加入前 加入後 編輯Program.cs檔案 修改program檔案內容,調整AddSwaggerGen的內容,目的是為了可以讀取我們所寫的註解 program檔案與.net5以前不一樣,保哥的部落格有比較詳細的說明 builder.Services.AddSwaggerGen(options => { // using System.Reflection; var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename)); }); 加入前 加入後 編輯WeatherForecastController檔案 這裡有個重點,如果要增加下一個action時候,預設的範例檔案,需要調整route的設定,才能讀取到,不然會跳錯誤訊息 加入前 加入後 加入第二個方法 執行結果 就可以成功讀取到兩個方法了 參考 微軟官方 範例檔 GitHub

September 26, 2022

dotnet6 Telegram.Bot範例

目的 使用telegram做聊天機器人 建立新專案 選擇ASP.NET Core Web API專案範本,並執行下一步 設定新的專案 命名你的專案名稱,並選擇專案要存放的位置。 其他資訊 直接進行下一步 NuGet加入套件 Telegram.Bot 編輯WeatherForecastController檔案 將預設的API註解 寫新的對外API [HttpGet("Test")] public async Task<string> Test() { var botClient = new TelegramBotClient("前置作業給的機器人ID"); //取得機器人基本資訊 var me = await botClient.GetMeAsync(); //發送訊息到指定頻道 Message message = await botClient.SendTextMessageAsync( chatId: "前置作業給的頻道ID", text: "Trying *all the parameters* of `sendMessage` method"); //回傳取得的機器人基本資訊 return $"Hello, World! I am user {me.Id} and my name is {me.FirstName}."; } 執行結果 F5執行後,依照下列步驟操作,並確認結果 就可以看到telegram的機器人有發送一個訊息 參考 官方文件 holey’s Blog...

September 25, 2022