ระบบแยกค่า configuration ที่สำคัญออกจาก code โดยเก็บไว้ในไฟล์ .env แทน เพื่อป้องกันข้อมูลสำคัญอย่าง connection string และ credentials หลุดเข้า Git repository
Setup
copy ไฟล์ .env.example เป็น .env แล้วแก้ค่าให้ตรงกับ environment ของตัวเอง โดยไฟล์ .env จะถูก ignore โดย .gitignore อัตโนมัติ
cp .env.example .envIIS Setup
ใน IIS สามารถกำหนดค่า Environment Variables ได้จาก System Environment ของเครื่อง โดยในกรณีที่มีการ deploy หลายแอปพลิเคชันบนเครื่องเดียวกัน สามารถใช้แนวทางการกำหนด Prefix เพื่อแยกชุดค่าคอนฟิกของแต่ละแอปออกจากกันได้
ตัวอย่างเช่น จากเดิมที่ใช้งานค่า DataSource__Provider=ORACLE สามารถปรับให้รองรับหลายแอปพลิเคชันได้โดยเพิ่ม Prefix ของชื่อแอปเข้าไป เช่น App1__DataSource__Provider=ORACLE เพื่อให้สามารถแยก Environment ของแต่ละแอปได้อย่างชัดเจน
จากนั้นในฝั่ง .NET สามารถกำหนดค่าใน Program.cs โดยใช้ AddEnvironmentVariables พร้อมระบุ Prefix ที่ต้องการ ระบบจะทำการอ่านค่า Environment Variables และตัด Prefix ที่กำหนดออกโดยอัตโนมัติ ทำให้แอปพลิเคชันสามารถใช้งานค่า Configuration ได้เหมือนเดิม โดยไม่ต้องปรับแก้โค้ดส่วนอื่นเพิ่มเติม
ตัวอย่างการกำหนดค่า AddEnvironmentVariables
builder.Configuration.AddEnvironmentVariables(prefix: "App1__");ตัวอย่างการกำหนด System Environment

Environment Variables
DataSource
กำหนด connection string สำหรับฐานข้อมูลหลักและรอง ดูรายละเอียดเพิ่มเติมได้ที่ Feature: Connect to Database
# ฐานข้อมูลหลัก
DataSource__Provider=ORACLE
DataSource__ConnectionString=Data Source=...
# ฐานข้อมูลรอง (Local)
DataSource__Local__Provider=MSSQL
DataSource__Local__ConnectionString=Data Source=...Redis
กำหนด connection string สำหรับ Redis
Redis__ConnectionString=localhost:6379LDAP
กำหนดค่าการเชื่อมต่อ LDAP server สำหรับ authenticate ผู้ใช้ผ่าน Active Directory หรือ LDAP ขององค์กร
App__LDAP__Host=<IP_OR_DOMAIN>
App__LDAP__Port=389
App__LDAP__SecureSocketLayer=false
App__LDAP__DistinguishedName=<OU>
App__LDAP__AdminUser=<EMAIL_LDAP>
App__LDAP__AdminPassword=<PASSWORD_LDAP>
App__LDAP__UserIdField=samaccountname
App__LDAP__UsernameField=samaccountname
App__LDAP__FirstNameField=givenname
App__LDAP__LastNameField=sn
App__LDAP__MailField=mail| Field | Description |
Host | IP address หรือ domain ของ LDAP server |
Port | Port ของ LDAP server ค่าเริ่มต้น 389 |
SecureSocketLayer | เปิดใช้ SSL สำหรับการเชื่อมต่อ LDAP |
DistinguishedName | OU path สำหรับค้นหา user ใน LDAP |
AdminUser | อีเมลหรือ username สำหรับ authenticate กับ LDAP |
AdminPassword | รหัสผ่านสำหรับ authenticate กับ LDAP |
UserIdField | ชื่อ attribute ที่ใช้เป็น user ID |
UsernameField | ชื่อ attribute ที่ใช้เป็น username |
FirstNameField | ชื่อ attribute ที่ใช้เป็นชื่อจริง |
LastNameField | ชื่อ attribute ที่ใช้เป็นนามสกุล |
MailField | ชื่อ attribute ที่ใช้เป็นอีเมล |
กำหนดค่าการเชื่อมต่อ SMTP server สำหรับส่งอีเมล ดูรายละเอียดเพิ่มเติมได้ที่ Feature: Connect to Mail Server
App__Email__SERVER=10.254.7.15
App__Email__PORT=25
App__Email__ENABLESSL=false
App__Email__USERNAME=username@domain.com
App__Email__PASSWORD=password
App__Email__SENDERADDRESS=sender@domain.com|Sender Name
App__Email__FROMPARAMETER=FROM
App__Email__TOPARAMETER=TO
App__Email__CCPARAMETER=CC
App__Email__BCCPARAMETER=BCC
App__Email__SUBJECTPARAMETER=SUBJECT
App__Email__BODYPARAMETER=BODY
App__Email__PRIORITYPARAMETER=PRIORITYFirebase
กำหนดค่าสำหรับส่ง push notification ผ่าน Firebase Cloud Messaging (FCM)
App__Firebase__ServerKey=<SERVER_KEY>
App__Firebase__FcmPushUrl=https://fcm.googleapis.com/fcm/send| Field | Description |
ServerKey | Server key สำหรับ authenticate กับ Firebase Cloud Messaging |
FcmPushUrl | URL endpoint สำหรับส่ง push notification ผ่าน FCM |
AsymmetricKey
กำหนด RSA key pair สำหรับเข้ารหัสและถอดรหัส payload ที่รับมาจาก client ดูรายละเอียดเพิ่มเติมได้ที่ Decrypt Payload
App__AsymmetricKey__HttpPayloadKey__PrivateKey=-----BEGIN RSA PRIVATE KEY-----...-----END RSA PRIVATE KEY-----
App__AsymmetricKey__HttpPayloadKey__PublicKey=-----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----การดึงค่า Configuration
ค่าใน .env ถูก bind เข้า ASP.NET Core configuration อัตโนมัติ สามารถดึงค่าได้ผ่าน builder.Configuration โดยใช้ : แทน __ ในการระบุ path
// ดึงค่าเดี่ยว
var provider = builder.Configuration.GetSection("DataSource:Provider").Value;
// ดึงทั้ง section
var dataSource = builder.Configuration.GetSection("DataSource").Get<DataSourceConfig>();
// ดึงค่าจาก App section
var corsPolicy = builder.Configuration.GetSection("App:CorsPolicy").Get<string[]>();| รูปแบบใน .env | รูปแบบใน Configuration |
DataSource__Provider | DataSource:Provider |
DataSource__Local__Provider | DataSource:Local:Provider |
App__LDAP__Host | App:LDAP:Host |