發表文章

目前顯示的是有「實作」標籤的文章

「8 皇后棋盤」程式實作

圖片
一、前言 因緣際會之下被要求撰寫取得 8 皇后棋盤的全部解答,因此特別寫撰寫文件,供日後參考。 二、規則 每個皇后不能再同列。 每個皇后不能再同行。 每個皇后不能同斜角線上。 三、操作 圖、開啟 VS2019 > 開啟新的 主控台應用程式 專案 > 輸入底下程式碼 class Program { /// <summary> /// 主程式 /// </summary> /// <param name="args"></param> static void Main(string[] args) { var arr = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7 }; var arrs = GetArrs(arr); arrs = RemoveObliqueLine(arrs); foreach (var ans in arrs) { Console.WriteLine($"第{arrs.IndexOf(ans) + 1}個棋盤"); foreach (var item in ans) { var str = "........".Remove(item, 1).Insert(item, "Q"); Console.WriteLine(str); } Console.WriteLine($""); } Console.ReadKey(); } /// <summary> /// 移除 斜角線的棋盤 /// </summary> /// <param name="arrs"></param> /// <returns...

使用 Visual Studio 2019 實作「RESTful API」

圖片
一、介紹 REST 是Roy Thomas Fielding博士於2000年博士論文提出的一種軟體架構風格,目的是讓不同軟體、程式於網路互相傳遞資訊。因為它是一種風格而不是規範,依據筆者的經驗會依照當時的專案或公司規定而決定是否完全遵守。 二、專案架構 圖、Visual Studio 2019 專案架構 三、常用的 HTTP Method 代表用意 GET 讀取 PUT 更新 DELETE 刪除 POST 新增 四、RESTful 路由應用 五、使用 Visual Studio 2019 建置 RESTful API 圖、修改 WebApiConfig.cs 原始碼(C#) public static class WebApiConfig { public static void Register(HttpConfiguration config) { // 針對 JSON 資料使用 camel 案例。 config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); // Web API 設定和服務 // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == ...

「NSwag」是 .net 下的描述 OpenAPI 好用工具

圖片
一、介紹 NSwag 是一個 .net 、 .net core 下的 Swagger / OpenAPI 2.0 和 3.0 的工具,使用 JOSN 去描述 RESTful web API 。 二、Swagger Swagger 是一個介面描述語言使用 JSON 去描述 RESTful API 三、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 四、 Nuget NSwag.AspNet.Owin Microsoft.AspNet.WebApi.Owin 五、操作步驟 圖、建立 TestApiController.cs 原始碼 /// <summary> /// TestApiController summary /// </summary> public class TestApiController : ApiController { /// <summary> /// TestApi Get TestVm summary /// </summary> /// <param name="data"></param> /// <returns></returns> [HttpGet] public List<string> Get([FromUri]List<string> data) { return data; } } 圖、修改 Startup.cs 原始碼 var config = new HttpConfiguration(); app.UseSwaggerUi3(typeof(Startup).Assembly, settings => { settings.GeneratorSettings.DefaultUrlTemplate = "api/{controller}/{action}/{id?}"; }); app.UseWebApi(config); c...

asp.net下的工作排程套件「Quartz」

圖片
一、前言 筆者曾使用 Quartz  撰寫以 Web 應用程式為基礎下的工作排程器,寫法也挺簡單的因此介紹給讀者。 二、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 三、專案架構 Windows 主控台 為基礎下撰寫的範例 圖、專案架構 四、操作步驟 圖、建立 TestJob.cs ,輸入底下 程式碼 程式碼(C#) public async Task Execute(IJobExecutionContext context) { //輸出 日期(年月日 時分秒) await Console.Out.WriteLineAsync(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } 圖、在 Program.cs 的 main 裡,輸入底下程式碼 程式碼(C#) //建立 工作JOB var job = JobBuilder.Create<TestJob>().WithIdentity("job1", "group1").Build(); //設定 工作JOB為 立即執行、每秒重複一次 的觸發器 var trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(1) .RepeatForever()) .Build(); var factory = new StdSchedulerFactory(); var scheduler = await factory.GetScheduler(); // 建立 工作排程 await scheduler.ScheduleJob(job, trigger); // 排程 開始 await scheduler.Start(); Console.Re...

asp.net 下的 JSON 套件最佳利器「Newtonsoft.Json」

圖片
一、前言 筆者很常使用 Newtonsoft.Json 於 JSON 資料的序列化與反序列化,因為好用且有名因此介紹筆者常用的寫法給讀者。 二、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 三、Newtonsoft.Json 的常用類別 JArray:代表 JSON array JObject:代表 JSON 物件 JProperty:代表 JSON 屬性 JToken:代表 JSON Token,可為 JArray、JObject、JProperty、JValue …等 JValue:代表一個 JSON 值,可能是 string、integer、date …等 四、反序列化 圖、反序列化 程式碼 var jsonStr = "{'a':'a1', 'b': 'b1'}"; return JsonConvert.DeserializeObject<JToken>(jsonStr); 圖、執行結果 五、序列化 圖、序列化 程式碼 var jsonObj = new { a = "a1", b = "b1" }; return JsonConvert.SerializeObject(jsonObj); 圖、執行結果 六、參考 Newtonsoft.Json

「NLog」與「Sql Server」資料庫的完美搭配

圖片
一、前言 筆者工作時會將應用程式的資訊透過 NLog 寫入 Db(Sql Server) 。為了日後方便記憶,因此文章就這樣誕生了~ 二、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 三、 Nuget 安裝套件 NLog NLog.Config NLog.Schema 圖、套件清單 四、操作步驟 圖、修改 NLog.config 的 target 、 logger 元素 NLog.config 設定 < targets > < target name = "database" xsi:type = "Database" > < connectionStringName > DefaultConnection </ connectionStringName > <!--<connectionString>Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=XXX;Integrated Security=True</connectionString>--> < commandText > INSERT INTO [dbo].[Log] ([MachineName] ,[Logged] ,[Level] ,[Message] ,[Logger] ,[Callsite] ,[Exception]) VALUES (@MachineName ,@Logged ,@Level ,@Message ...

使用「NLog」來記錄應用程式的大小事吧

圖片
一、介紹 NLog 是 .net 下的日誌套件,因為只要一句程式碼即可紀錄日誌,因此筆者常使用它記錄應用系統的錯誤、資訊…等。 二、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 三、 Nuget 安裝套件 NLog NLog.Config NLog.Schema 圖、套件清單 四、操作步驟 圖、修改 NLog.config 的 target 、 logger 元素 NLog.config 設定 < targets > < target xsi:type = "File" name = "f" fileName = "${basedir}/logs/${shortdate}.log" layout = "${longdate} ${uppercase:${level}} ${message}" /> </ targets > < rules > < logger name = "*" minlevel = "Debug" writeTo = "f" /> </ rules > 圖、使用 nlog 原始碼 c# public void LogTest() { var log = LogManager.GetCurrentClassLogger(); log.Info($"Test"); } 圖、執行後結果 五、相關連結 「NLog」與「Sql Server」資料庫的完美搭配 六、參考 NLog Tutorial NLog Nuget

使用「IMAP」讀取「Gmail」信件的主旨

圖片
一、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 二、 Nuget 圖、套件 MailSystem.NET 二、允許低安全性應用程式 要使用 IMAP 讀取 Gmail 的信,需啟用 允許低安全性應用程式 未啟用 允許低安全性應用程式 會發生底下錯誤 [AUTHENTICATIONFAILED] Invalid credentials 圖、AUTHENTICATIONFAILED Invalid credentials 啟用 允許低安全性應用程式 圖、登入 Gmail > 按下 管理你的 Google 帳戶 > 進入 Google Console 頁面 圖、按下 安全性 > 按下 開請存取權(不建議) 圖、啟用 允許低安全性應用程式 三、讀取信件主旨的範例 原始碼 c# using (var imap = new Imap4Client()) { var rets = new List<string>();      //imap.gmail.com 為 Google 的 IMAP Server imap.ConnectSsl("imap.gmail.com", 993); imap.Login("你的Gmail", "你的Gmail密碼"); var inboxs = imap.AllMailboxes.Cast<Mailbox>().Select(x => x.Name).ToList(); if (inboxs.IndexOf("INBOX") > -1) { var inbox = imap.SelectMailbox("INBOX"); for (var i = 1; i <= inbox.MessageCount; i++) { //讀取信件 var m = inbox.Fetch.MessageObject(i); ...

使用「Gmail」藉由「SMTP Sever」寄信

圖片
一、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 二、允許低安全性應用程式 要使用 Gmail 寄信,需啟用 允許低安全性應用程式 未啟用 允許低安全性應用程式 會發生底下錯誤 SMTP 伺服器需要安全連接,或用戶端未經驗證。 伺服器回應為: 5.7.0 Authentication Required. Learn more at 圖、SMTP 伺服器需要安全連接,或用戶端未經驗證 啟用 允許低安全性應用程式 圖、登入 Gmail > 按下 管理你的 Google 帳戶 > 進入 Google Console 頁面 圖、按下 安全性 > 按下 開請存取權(不建議) 圖、啟用 允許低安全性應用程式 三、寄信範例 原始碼 c# try { //smtp.gmail.com 為 Google 的SMTP Server,587 Port using (var smtp = new SmtpClient("smtp.gmail.com", 587)) using (var mail = new MailMessage()) { mail.From = new MailAddress("你的Gmail"); mail.To.Add("寄到哪個Gmail"); mail.Subject = "主旨"; mail.Body = "信件內容"; //啟用 Html mail.IsBodyHtml = true; smtp.Credentials = new NetworkCredential("你的Gmail", "你的Gmail密碼"); smtp.EnableSsl = true; smtp.Send(mail); } return "Ok"; } catch (Exce...

使用「CsvHelper」讀取、寫入 CSV 檔案

圖片
一、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 二、 Nuget 圖、CsvHelper 套件。 三、專案結構介紹 圖、建立 Test 資料夾 > 建立 Read.csv ,內容如下 圖、建立 Vm 資料夾 > 建立 Test.cs ,貼上 Test類別 原始碼 原始碼 public class Test { public string a { set; get; } public string b { set; get; } } 四、讀取 CSV 檔案 圖、開啟 Program.cs 程式,輸入範例程式碼 範例程式碼 C# using (var reader = new StreamReader("Test\\Read.csv")) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { var records = csv.GetRecords<Test>().ToList(); foreach (var r in records) { Console.WriteLine($"第{records.IndexOf(r) + 1}列, a={r.a}、b={r.b}"); } } 圖、執行結果 五、 寫入 CSV 檔案 圖、開啟 Program.cs 程式,輸入範例程式碼 範例程式碼 C# using (var fs = new FileStream("Test\\Create.csv", FileMode.OpenOrCreate)) using (var sw = new StreamWriter(fs)) using (var csv = new CsvWriter(sw, CultureInfo.InvariantCulture)) { var data = new List<Test>() { new Test { a="a1", b=...