แปลง UTF-8 เป็น TIS-620 ไป ๆ กลับ ๆ ใน .NET Core

ได้ไปทำงานกับลูกค้าที่มี project เก่า ๆ บางตัวที่ยังใช้ข้อมูลในฐานข้อมูลที่มี character set เป็น tis-620 อยู่ และไม่สามารถแปลงเป็น utf-8 ได้ด้วยสาเหตุอะไรบางอย่าง (น่าจะเป็นงานที่จะงอกขึ้นมากับทุก ๆ ระบบที่เค้า live อยู่) รู้แค่ว่า project ใหม่ ๆ ยังต้องไปดึงข้อมูลจากฐานข้อมูลนี้ แถมอีก project ต้องส่งข้อมูลที่เป็น utf-8 ไปหาระบบที่รองรับแต่ tis-620 อีก นั่นคือ ต้องมีวิธีแปลงข้อมูลจาก tis-620 ไปเป็น utf-8 และแปลงจาก utf-8 กลับไปเป็น tis-620

ข่าวร้ายคือ ใน .NET Core Framework ยกเลิกการ support legacy character set บางภาษาไปแล้ว รวมถึงภาษาไทยด้วย นั่นคือ วิธีการ convert encoding ที่ควรจะทำได้ง่าย ๆ มันไม่ง่ายอีกต่อไป

อ่านต่อ »

Convert Datetime จาก ค.ศ. เป็น พ.ศ. ใน Razor Template

ใน C# ที่ใช้ Razor Template Engine เช่นในแอพที่เป็น MVC หรือเอา RazorLight Package มาใช้ในการ render ตอนเวลาต้องการ render วันที่ที่เป็น string ที่เป็นปี ค.ศ. เช่น “2018-02-17T01:22:38” ให้เป็นปี พ.ศ. จะต้องทำการ convert ก่อน โดยอาจจะ convert ตั้งแต่ใน app เอง หรือจะ convert ใน template ก็ได้

อ่านต่อ »

ใส่ Swagger ให้กับ .NET Core API

swagger เป็น tool เอาไว้สำหรับสร้าง document สำหรับ API แถมว่า document ที่สร้างขึ้นมา มันทำหน้าที่เป็น testing tool เพื่อใช้ทดสอบ API นั้นให้ได้อีกด้วย คือเรียกได้ว่า โคตรมหาเทพ tool กันเลยทีเดียว

ตัว swagger เอง มัน support หลาย ๆ ภาษา .NET Core เป็นหนึ่งในนั้น วิธีการใช้งานก็ไม่ยากอะไร (เท่าที่ลอง) เลยเอามาจดไว้หน่อย เดี๋ยวลืม

อ่านต่อ »

JSON Configuration ใน .NET Core

ใน .NET Core มันใช้ configuration ได้หลายแบบ แบบที่เป็นไฟล์ หลัก ๆ ก็ INI, JSON ไม่ก็ XML ทีนี้พอจะทำแอพที่เอา .NET Core ไปเข้า pipeline ของ ci/cd การทำ configuration file ก็เป็นทางเลือกที่น่าสนใจในการ manage configuration

ต้องเตือนไว้ก่อนว่า โดยปกติ มันไม่ควรเอา configuration ไว้ใน code base แล้วมา set profile ว่าเออ นี่จะ build สำหรับขึ้น production นะ อันนี้จะใช้ build ขึ้น staging นะ แต่ควรจะใช้ binary เดียว build ครั้งเดียว และใช้ configuration ในการจัดการควบคุม environment แทน

อ่านต่อ »

เขียน middleware บน .NET Core 2.0

โดยปกติ เวลาสั่ง dotnet run ตัว web api มันจะแสดงแค่ว่า ตอนนี้กำลัง listen อยู่ที่ port ไหน ถ้ามี request ที่ตรงกับ route เข้ามาก็เงียบ ๆ จะมีบ่น ๆ ก็แค่ตอนเจอ error เลยลองตั้งโจทย์ว่า อยากจะให้ web api request มันคอย log ทุก request ที่เข้ามาบน console เหมือนกับ access log จะทำยังไงดี middleware น่าจะเป็นคำตอบที่น่าสนใจ

อ่านต่อ »

ใช้ LinQ กับ mongodb บน .NET Core 2.0

น้องแอ๋มมาบอกว่า อยากให้ลองใช้ LinQ แล้วจะติดใจ เลยลองเอาตัวอย่างเดิมที่เขียนต่อกับ mongodb มา modify เพิ่ม โดยการก๊อปปี้เอา CustomersService class มาสร้างเป็น CustomersLinQService class แล้วแก้ให้มาใช้ LinQ

อ่านต่อ »

CRUD บน mongodb ด้วย .NET Core 2.0

วิธีทำให้ .NET Core 2.0 ไปเรียกใช้งาน mongodb ทำได้ผ่าน package ที่ชื่อ MongoDB.Driver (NuGet) วิธีลงก็ตรงไปตรงมาผ่านคำสั่ง dotnet add package

dotnet add package MongoDB.Driver

อ่านต่อ »

ใช้ CORS ใน .NET Core 2.0

ปัญหาเวลาทำ frontend กับ backend แยกออกจากกันคือ ถ้าทั้ง 2 ฝั่งอยู่คนละ domain ไม่ว่าจะคนละ subdomain คนละ port หรือ คนละ scheme (เช่น http กับ https) ก็ตาม จะเจอปัญหาเรื่อง cross origin ซึ่งเกิดจากที่ตัวบราวเซอร์เองไม่อนุญาตให้ใช้ ajax เรียกเนื้อหาที่อยู่บน domain อื่น เรียกว่า same-origin policy เพื่อป้องกันการเข้าถึงข้อมูลที่สำคัญข้าม domain กัน

วิธีหนึ่งที่สามารถแก้ได้คือ เอา reverse proxy มาคั่นกลาง แล้วทำให้ backend มาใช้ domain เดียวกันกับ frontend แต่ถ้าไม่สามารถทำแบบนี้ได้ ก็มีอีกวิธีคือการกำหนดที่ backend ให้เปิดรับ request จาก origin ที่ต้องการ เรียกว่า Cross Origin Resource Sharing หรือ CORS

อ่านต่อ »

เอา Nuget Package ไปไว้ที่ Nuget Server ผ่าน .NET Core 2.0 Command Line

Nuget คือ package manager สำหรับ .NET เอาไว้ให้กับคนทำ package สามารถแชร์ package ให้ developer คนอื่นสามารถดาวน์โหลดไปใช้งานได้

Nuget Package ที่สร้างบน .NET Core ผ่านคำสั่ง dotnet pack สามารถเอาไป publish บน Nuget Server ได้ผ่านคำสั่ง dotnet nuget push

อ่านต่อ »