Saladpuk.com
🏆 เนื้อหาหลัก
🏆 เนื้อหาหลัก
  • 💖สลัดผัก
  • 📰มีอะไรใหม่บ้าง
    • 2020
      • 2020-11
      • 2020-10
      • 2020-09
      • 2020-08
      • 2020-03
      • 2020-02
      • 2020-01
    • 2019
      • 2019-12
      • 2019-11
      • 2019-10
      • 2019-09
      • 2019-08
  • 🤔อ่านเรื่องไรดี ?
  • มือใหม่หัดเขียนโค้ด
    • 👶เขียนโค้ดด้วยภาษา C#
      • เกิดมาไม่เคยเขียนโค้ดมาก่อนเบย
      • 👶พื้นฐาน
        • 1.โปรแกรมที่ต้องลง
        • 2.โครงสร้างของโค้ด
        • 3.ชนิดของข้อมูล
        • 4.การสร้างตัวแปร
        • 5.คำสั่งพื้นฐาน
        • 6.การแปลงข้อมูล
        • 7.การเปรียบเทียบค่า
        • 8.การตัดสินใจด้วย IF statements
        • 9.การตัดสินใจด้วย Switch statements
        • 10.การทำงานซ้ำๆด้วย While
        • 11.การทำงานซ้ำๆด้วย Do While
        • 12.การทำงานซ้ำๆด้วย For
        • 13.การแก้โจทย์จากรูป
        • 14.มารู้จักกับ Array กัน
      • 🧑ระดับกลาง
        • 15.Value type vs Reference type
        • 16.ลดงานซ้ำๆด้วย Method
        • 17.มารู้จักกับ Class & Field กัน
        • 18.มารู้จักกับ Constructor กันบ้าง
        • 19.มาเขียน Method ใน Class กัน
        • 20.มารู้จักกับ Property กัน
        • 21.ลองใช้คลาสแบบจริงจังบ้าง
        • 22.การสืบทอด Inheritance
        • 23.Polymorphism
        • 24.Abstract Class
        • 25.Interface
        • 26.Namespace
        • 27.Enum
        • 28.Exception handler
        • 29.ลงลึกกับ string
        • 30.StringBuilder เพื่อนคู่ string
      • 👨⏳ระดับสูง
        • Generic
        • Delegates
        • Action & Func
        • Lambda expression
        • LINQ
        • พระคัมภีร์การใช้คำสั่ง LINQ
      • 💡Tips
        • 💡C# version 8.0
        • 💡Boxing & Unboxing
    • 👶Algorithm
      • 👾Algorithm Big-O
      • 👽Algorithm P & NP
    • 👦OOP
      • 💖Abstraction
      • 💖Encapsulation
      • 🏆Abstraction & Encapsulation
      • 💖Inheritance
      • 💖Polymorphism
      • 🏆Inheritance & Polymorphism
      • 📝ลองเขียน OOP ดูดิ๊
      • 👑OOP + Power of Design
      • 🥰เทคนิคในการออกแบบ
    • 👶บทสรุปฐานข้อมูล
      • เก็บรูปในฐานข้อมูล
      • Database indexing
      • การลบข้อมูล
    • 👦Communication Patterns
    • 👦Design Patterns
      • 🤰Creational Patterns
        • 🏭Factory Method
        • 🏭Abstract Factory
        • ☝️ Singleton Pattern
        • 🏗️ Builder Pattern
        • 🎎Prototype Pattern
      • 🧱Structural Patterns
        • 🔌Adapter Pattern
        • 📪Proxy Pattern
  • Puzzle
    • 🧠Challenges
      • 🐴Google ม้า 25 ตัว
      • 🌉Amazon เสา 2 ต้น
      • 🥇ทองเก๊
      • 💊ยาต้านโควิด
      • 🎩CP หมวก 5 ใบ
      • 🧓Einstein's Riddle 01
  • พื้นฐานที่ควรต้องรู้
    • 🐳Docker
      • 📦Docker Containers
      • 🃏Docker Exercise 01
      • 🛠️ Docker Tools
      • 🗃️ Docker Registry
      • 🖼️ Container Image
      • 📢Docker Push
      • 🔄WSL
    • 👶Clean Code
      • 🧓Uncle Bob - Clean Code
      • 🧓Uncle Bob - Comments
      • 🧓Uncle Bob - Naming
      • 🧓Uncle Bob - Mindset
      • 🧓Uncle Bob - TDD
    • 👶Code Smells
    • 👶สิ่งที่คนเขียนโค้ดมักเข้าใจผิด
    • 👶AI พื้นฐาน
    • 👶Git พื้นฐาน
      • Git branching strategy
    • 👶Cloud พื้นฐาน
    • 👶UML พื้นฐาน
      • Activity Diagram
      • Class Diagram
      • Sequence Diagram
      • Use case Diagram
      • บทสรุปการใช้ UML
    • 👶Data Scientist
      • การเลือก Algorithms ให้ AI (1/5)
      • การเตรียมข้อมูลให้ AI (2/5)
      • หลักการตั้งคำถามให้ AI (3/5)
      • แฉความลับของ AI Model (4/5)
      • หัดเขียน AI จาก AI ของคนอื่น (5/5)
    • 👶DevOps พื้นฐาน
    • 👶Docker ขั้นพื้นฐาน
      • Image and Container
      • แชร์ Docker Image ที่สร้างไว้
    • 👶Microservices พื้นฐาน
      • Microservices ที่ดีมีลักษณะยังไง
      • Microservices Tips
      • จาก Monolith สู่ Microservices
    • 👶ความรู้พื้นฐานในการทำเว็บ
    • 👦Bottlenecks of Software
      • หัวใจที่สำคัญที่สุดของฐานข้อมูล
    • 👦Agile Methodology
      • Agile in a Nutshell
      • Software Development Life Cycle
      • Code Review
    • 👦Security พื้นฐาน
      • การเก็บรหัสผ่านที่ถูกต้อง
      • Security in actions
        • Hash function
      • Security Principles
      • 😎The Matrix 1
      • 😎The Matrix 2
      • HTTPS in a nutshell
    • 👦SOLID Design Principles
      • มารู้จักกับ SOLID กันดีกว่า
      • Single-Responsibility Principle
      • Open/Closed Principle
      • Liskov Substitution Principle
      • Interface Segregation Principle
      • Dependency-Inversion Principle
  • Cloud Computing
    • 👶Microsoft Azure 101
      • สมัคร Microsoft Azure
      • รู้จักกับ Resource Groups
      • สร้างเว็บตัวแรกกัน
      • สร้าง Virtual Machine กัน
      • ประเภทของคลาว์เซอร์วิส
      • มาสร้าง Logic App กัน
      • มาสร้าง Function App กัน
      • คลาว์คิดเงินยังไง ?
      • Cloud Native
      • Guideline for Cloud scaling
      • Auto Scaling
    • 👶Azure App Services
    • 👶App Service Plan
    • 👶Azure Storage
      • Blob storage
        • ลองสร้างที่เก็บไฟล์กันเลย
        • เข้าใจ Blob storage ให้มากขึ้น
        • ลองเขียนโค้ดอัพโหลดไฟล์กันบ้าง
        • สร้างเว็บจากที่ฝากไฟล์บนคลาว์
    • 👶Azure Bot Service
      • Bot เข้าใจเราได้ยังไงกันนะ
    • 👶Azure Cognitive Services
      • การสร้าง Cognitive Services
      • การ Login ด้วยใบหน้า
      • อ่านลายมือจากรูปเป็นตัวอักษร (OCR)
      • เขียน AI แยกของต่างๆทำยังไง?
      • เขียนแอพ ทายอายุ บอกเพศ ง่ายจิ๊ดเดียว
      • เขียนแอพให้ AI อธิบายรูปเป็นภาษาคน
    • 👶Machine Learning Studio
      • มาสร้าง AI ของแท้ตัวแรกของเรากัน
      • สร้าง AI ตัดสินใจอนุมัติบัตรเครดิต 💳
      • ลองเรียกใช้ AI ของเรากัน
    • 👶Azure Service Fabric
      • สร้าง Service Fabric กัน
    • 👶Blockchain
      • Blockchain ทำงานยังไง ?
      • Consensus Algorithm คืออะไร ?
      • สร้าง Blockchain ใช้เองกัน !
      • หัดเขียน Smart Contract กัน
    • 👶Power BI
    • 👶Azure Web App
      • เซิฟเวอร์บนคลาว์ ราคา? ต่าง?
    • 👶Azure DevOps
      • เล่น Azure DevOps กัน
      • เล่นกับ Repository
      • ลองทำ Continuous Integration (CI)
      • ลองทำ Continuous Delivery (CD)
      • เล่น Kanban Board
    • 🤠Cloud Playground
      • การป้องกันความลับหลุดตอนที่ 1
      • การป้องกันความลับหลุดตอนที่ 2
      • การป้องกันความลับหลุดตอนที่ 3
      • การป้องกันความลับหลุดตอนจบ
  • Software Testing
    • 👦Test-First Design
    • 👦Test-Driven Development
      • 1.มารู้จักกับ TDD กันดีกว่า
      • 2.Test cases เขาเขียนกันยังไงนะ
      • 3.เครื่องมือในการทดสอบ
      • 4.การใช้ Theory และ InlineData
      • 5.โค้ดที่ทดสอบได้
      • 6.Mantra of TDD
      • 7.Functional & None-Functional testing
      • 8.Manual vs Automation testing
      • 9.Automation Frameworks in .NET
      • 10.Mock Framework
      • 11.มาเรียนการใช้ Moq กันเถอะ
      • 12.สรุป
  • Web
    • 👦Web API
      • 1.Web API คืออะไร
      • 2.ติดตั้ง .NET Core SDK
      • 3.สร้าง Web API ตัวแรกกัน
      • 4.Verbs
      • 5.Swagger เพื่อคู่ API
      • 6.การใช้ Model
      • 7.เรียก Web API ผ่าน Postman
      • 8.มาจัดกลุ่ม API กัน (1/2)
      • 9.มาจัดกลุ่ม API กัน (2/2)
  • Software Design
    • 🤴Design Patterns
      • 🦈Creational patterns
        • Abstract Factory
        • Builder
        • Factory Method
        • Prototype
        • Singleton
      • 🦈Structural patterns
        • Adapter
        • Bridge
        • Decorator
        • Facade
        • Proxy
      • 🦈Behavioral patterns
        • Chain of Responsibility
        • Command
        • Iterator
        • Mediator
        • Memento
        • Observer
        • State
        • Strategy
        • Template Method
        • Visitor
Powered by GitBook
On this page
  • 😢 ปัญหา
  • 😘 เข้าใจให้ตรงกันก่อน
  • 💔 ตัวอย่างปัญหา
  • 🤠 วิธีแก้ปัญหา (การตั้งค่าความลับ)
  • 🤠 วิธีแก้ปัญหา (แยกความลับออกจาก source code)

Was this helpful?

Export as PDF
  1. Cloud Computing
  2. Cloud Playground

การป้องกันความลับหลุดตอนที่ 1

🤔 การเก็บรหัสลับบนคลาว์ เขาทำกันยังไงนะ ?

PreviousCloud PlaygroundNextการป้องกันความลับหลุดตอนที่ 2

Last updated 5 years ago

Was this helpful?

😢 ปัญหา

ในการเขียนแอพอะไรก็ตาม ในบางทีตัวแอพของเราก็อาจจะต้องมีการเชื่อมต่อกับภายนอก เช่น ฐานข้อมูล, API หรืออะไรก็ตามแต่ ซึ่งการเชื่อมไปที่ต่างๆเหล่านั้น มันจำเป็นที่เราจะต้องใส่ รหัสลับ ของเราลงไป เพื่อให้มันสามารถเชื่อมไปยังที่อื่นๆได้ เช่น ConnectionString ที่เอาไว้ต่อฐานข้อมูล หรือ Username & Password ในการเข้าใช้งานระบบอื่นๆ แล้วเราจะเก็บความลับพวกนั้นไว้ในแอพของเราได้ยังไง โดยไม่ให้มันหลุดออกไป เพราะเราคงไม่อยากให้ฐานข้อมูลของเรามีใครก็ไม่รู้เข้าใจดูหรือแก้ไขอะไรเล่นๆแน่นอนชิมิ ?

คำเตือน ในบางทีเราก็จะไม่ใส่รหัสลับพวกนั้นลงไปในแอพของเรา แต่เราจะแจกให้กับคนในทีมเพื่อให้เพื่อนๆในทีมสามารถเข้าไปจัดการแก้ไขได้ แต่ก็อย่าลืมนะว่า รหัสลับมันอาจจะรั่วเพราะคนในทีมเราเองก็ได้ และ เลวร้ายยิ่งกว่าคือเขาอาจจะเป็นคนร้ายเองก็เป็นได้

แนะนำให้อ่าน บทความนี้เป็นส่วนหนึ่งของคอร์ส ที่จะพาเพื่อนๆแมวน้ำทั้งหลายได้ลองมาดูว่า การสร้างโปรเจคเพื่อทำงานบนคลาว์ โดยใช้มาตรฐานสากลจริงๆแล้วเขาทำกันยังไง ส่วนถ้าสนใจอยากอ่านต่อก็กดไปที่ลิงค์สีฟ้าๆได้เลย

จากที่ว่ามาเดี๋ยวเราจะค่อยๆดูตัวเลือกของเราไปทีละตัวละกันว่ามันมีเรื่องอะไรมาช่วยเราได้บ้าง ซึ่งแต่ละตัวระดับความเข้มงวดของมันก็จะใช้ตามแต่ละสถานะการณ์ของมันไป

😘 เข้าใจให้ตรงกันก่อน

ข้ามไปอ่านหัวข้อถัดไปได้เลยถ้าใครใช้ asp.net core api เป็นอยู่แล้ว

ตัวอย่างในบทความนี้ผมจะสร้างเว็บโดยใช้ asp.net core (API) เป็นพื้นฐาน และใช้ Visual Studio Code ในการเดโม่ทั้งหมด ดังนั้นถ้าใครอยากจะทำตามก็ไปติดตั้งของต่างๆให้เรียบร้อยแซ๊ะ หรือถ้าขี้เกียจติดตั้งก็โหลดไฟล์เว็บด้านล่างนี้ไปแล้วข้ามไปดูหัวข้อถัดไปเลย

การสร้างโปรเจค asp.net core ก็สร้างโดยใช้คำสั่งพื้นฐานด้านล่างธรรมดาแหละ โดยผมจะสร้างเป็นตัว web api ละกันจะได้อธิบายง่ายๆหน่อย

dotnet new api -n saladpuk-demo

เพียงเท่านี้เราก็จะได้โปรเจคพื้นฐานมาเรียบร้อยละ

ตัวเว็บที่เราได้มาในโฟเดอร์ Controllers จะมีไฟล์ WeatherForecastController ที่เขาใส่ไว้เป็นพื้นฐาน เพื่อจำลองการพยากรณ์อากาศเอาไว้ ดังนั้นเราก็จะลองใช้คำสั่งด้านล่าง เพื่อทำการเปิดเว็บตัวนี้ขึ้นมา

dotnet run

ก็เป็นอันจบว่าเรามีตัวเว็บที่พร้อมเอาไว้เล่นกันต่อละ

💔 ตัวอย่างปัญหา

สมมุติว่าตัวเว็บของเราต้องไปดึงข้อมูลพยากรณ์อากาศจาก database เพื่อเอามาโชว์ให้ผู้ใช้ละกัน ผมก็จะเข้าไปแก้ไฟล์ WeatherForecastController เป็นราวๆนี้ละกัน

public IEnumerable<WeatherForecast> Get()
{
    var dbConnectionString = "รหัสลับในการต่อฐานข้อมูล";
    // จำลองว่าไปดึงข้อมูลจาก db มาแล้วได้ตัวนี้นะ
    var result = new[]
    {
        new WeatherForecast
        { 
            Date = DateTime.Now, 
            TemperatureC = 20, 
            Summary = "Balmy" 
        }
    };
    return result;
}

จากโค้ดตัวอย่างด้านบนเราจะเห็นว่าบรรทัดที่ 3 โค้ดของเรามีการฝัง ConnectionString ที่เป็นความลับเอาไว้ ซึ่งถ้าไม่มีเราก็จะไม่สามารถต่อฐานข้อมูลได้นั่นเอง ซึ่งถ้าเราปล่อยไว้แบบนี้มันจะเกิดปัญหาคือ

  • ถ้าเราอยากจะแก้ไขรหัสลับตัวนี้ เราก็จะต้อง build & deploy project ใหม่เท่านั้น

  • ใน source code ของเรามีความลับติดไปด้วยกับการ commit เสมอ ยิ่งถ้า repository ของเราเป็น public แล้วล่ะก็ ทุกคนบน GitHub ก็จะส่งยิ้มอ่อนให้เรา เพราะเขาก็เข้าฐานข้อมูลเราเช่นกัน

  • Developer ทุกคนเห็นความลับนี้หมด ดังนั้นใครจะเข้าฐานข้อมูลก็ได้

  • และอื่นๆนาๆ ที่เดี๋ยวจะมาเติมในบทความถัดๆไป

จากที่ร่ายมาก็จะเห็นว่ามันมีปัญหาหลายเรื่องม๊วกๆ ดังนั้นเราจะค่อยแก้ไปทีละเรื่องกันนะ

🤠 วิธีแก้ปัญหา (การตั้งค่าความลับ)

ตัวแรกที่แก้ได้ง่ายที่สุดก็คือ ทำให้เราแก้ไข configuration ต่างได้ง่ายๆ โดยไม่ต้อง Build & Deploy ตัวเว็บใหม่ดีกว่า โดยถ้าเราดูที่ตัวโปรเจคของเราดีๆ เราจะเห็นไฟล์ที่ชื่อว่า appsettings.json นั่นเอง ซึ่งเจ้าตัวนี้มีหน้าที่เอาไว้ทำการ config ของต่างๆให้กับโปรเจคนั่นเอง ดังนั้นเราจะย้ายความลับของเราออกจากไฟล์ .cs ไปไว้ที่ appsettings.json แทนตามโค้ดด้านล่าง

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "DbConnectionString" : "ABCDEFG"
}

จากโค้ดด้านบน ผมเพิ่มบรรทัดที่ 10 เข้าไป โดยตั้งชื่อมันว่า DbConnectionString และให้มันเก็บรหัสลับในการต่อฐานข้อมูลลงไป (ในตัวอย่างผมให้รหัสลับเป็น ABCDEFG นะ)

โดยปรกติตัว asp.net core มันจะอ่านไฟล์ appsettings.json ตอนเริ่มเว็บด้วยเสมอ ดังนั้นถัดไปผมก็จะแก้ไฟล์ WeatherForecastController ให้มันรับ IConfiguration เข้าไปใน constructor นั่นเอง ตามนี้

public class WeatherForecastController : ControllerBase
{
    private readonly IConfiguration configuration;

    public WeatherForecastController(IConfiguration configuration)
    {
        this.configuration = configuration;
    }

    ...
}

หมายเหตุ ตัว asp.net core มันจะอ่าน Environment Variables ขึ้นมา ซึ่งเราสามารถดูค่าพวกนั้นได้โดยใช้ IConfiguration ซึ่งโดยปรกติตัว asp.net core มันจะมีตัว Dependency Injection (DI) คอยส่ง object ของ IConfiguration มาให้เราอยู่แล้วโดยที่เราไม่ต้องไปทำอะไรเพิ่มเติมเลยครัช

สุดท้ายเพื่อให้เห็นภาพได้ง่ายว่าตัวเว็บเราสามารถอ่านค่าความลับที่เราเก็บไว้ใน appsettings.json ได้ เราก็ลองเอามันมาโชว์ดู โดยการเพิ่ม api เข้าไปนิสนุงตามด้านล่าง

[HttpGet("secret")]
public string Secret()
{
    return configuration["DbConnectionString"];
}

ข้อดีในการทำแบบนี้ ตัวเว็บของเราเมื่อต้องการแก้ไขค่า configuration ต่างๆก็สามารถทำได้เลย โดยที่ไม่ต้องไป build & deploy ใหม่นั่นเอง

ข้อควรระวัง จากที่ทำมาทั้งหมดนี้ มันจะยังไม่ได้แก้ปัญหาเรื่องเราฝังความลับของเราไว้ที่ source code นะ แม้ว่ามันจะไม่อยู่ในไฟล์ .cs แล้วก็ตาม แต่ตัวความลับของเราก็ยังอยู่ในไฟล์ appsettings.json นั่นเอง ถ้าเรา commit ไฟล์นี้ขึ้นไป มันก็จะติดอยู่ใน history ต่อไปอยู่ดีนั่นเอง

🤠 วิธีแก้ปัญหา (แยกความลับออกจาก source code)

ถัดมาเราก็จะลองทำให้ความลับของเราไม่อยู่ติดไปกับ source code ของเรากันดีกว่า ซึ่งโดยปรกติตัวเครื่องคอมของเรามันจะมีสิ่งที่เรียกว่า Environment Variables อยู่ ซึ่งเราสามารถหามันได้จากการกดปุ่ม Windows แล้วหาคำว่า Environment Variables ตามรูปด้านล่างนั่นเอง

ซึ่งเมื่อเปิดขึ้นมาแล้ว เราก็จะเข้าไปกำหนดค่า Environment Variables (อันเดียวกับที่เรากำหนด path ให้ java ยังไงล่ะ)

ถัดมาเราก็จะทำการสร้าง Environment Variable ของเราขึ้นมาใหม่ โดยการกดที่ปุ่ม New... นั่นเอง (ในตัวอย่างผมสร้างไว้สำหรับ user ผมคนเดียวก็เลยเอาไว้ตรงนี้)

ถัดไปก็ทำการตั้งชื่อ variable ของเราได้เลย ซึ่งในตัวอย่างผมจะตั้งชื่อให้ตรงกับใน appsettings.json ละกัน จะได้ใช้เป็นตัวอย่างถัดๆไปต่อ ส่วนค่าที่จะใส่ตรงนี้ก็คือตัว database connection ตัวจริงที่เราจะทำการต่อไปนั่นเอง ตามรูปด้านล่าง แล้วก็กด OK เบย

เพียงเท่านี้เราก็สามารถเก็บความลับของเราเอาไว้ที่เครื่องได้เรียบร้อยแล้ว ก็กดปุ่ม OK อีกครั้งก็เป็นอันเสร็จสิ้นพิธี

หมายเหตุ สำหรับใครที่ลองทำตามมาถึงตรงนี้ แล้วมันยังอ่านได้ค่า ABCDEFG แบบเดิมอยู่ ให้ลองปิด Visual Studio หรือ Command Prompt หรือ Terminal ลงไปก่อน แล้วลองเปิดมา Run ตัวเว็บใหม่อีกทีดูนะ

ข้อดีในการทำแบบนี้ ตัว source code ของเราก็จะไม่มีความลับถูกเขียนไว้ในนั้นอีกต่อไปแล้ว ดังนั้นใน commit history ของเราก็จะลดปัญหาเรื่อง security leak ได้ในระดับหนึ่งเรียบร้อยแล้วนั่นเองขอรับ

ข้อควรระวัง แม้ว่าใน source code จะไม่มีความลับติดไปแล้ว แต่ในตอนทำงานเราก็จะต้องไปบอกทุกคนในทีมให้ทำการกำหนดค่า Environment Variables อยู่ดี และ ทุกคนก็จะรู้รหัสลับต่างๆที่เราพยายามซ่อนอยู่นั่นเอง ดังนั้นคนร้ายก็จะอยู่ในกลุ่มของพวกเรานั่นเอง

จากวิธีการแก้ไขปัญหาทั้ง 2 วิธีก็จะช่วยให้โค้ดของเรามีความปลอดภัยเรื่อง security leak เพิ่มขึ้น แต่ก็ยังไม่ใช่ 100% ดังนั้นเดี๋ยวไปดูบทความถัดไปกันดีกว่าว่าจะค่อยๆก่อร่างสร้างตัวยังไง มันถึงจะป้องกันเรื่องพวกนี้บนคลาว์ได้ 99.99%

หมายเหตุ สาเหตุที่เรียกว่า 99.99% เพราะสุดท้ายระบบก็จะต้องมีใครซักคนหนึ่ง ที่สามารถเข้าไป reset ความลับพวกนี้อยู่ดี เพราะไม่อย่างนั้นดันเผลอไปลบความลับออก หรือดันจำไม่ได้ว่าเก็บไว้ที่ไหน ก็จะทำให้เราไม่สามารถกู้คืนหรือแก้สถานะการณ์อะไรได้เลยนั่นเอง คงไม่อยากเป็นเหมือนบริษัทที่เป็น Bitcoin xchanger ที่เป็นข่าวว่าลืม password จนทำให้ต้องปิดบริษัทเพราะ access ไปดำเนินการต่างๆไม่ได้หรอกชิมิ?

แล้วก็เข้าไปดูเว็บของเราด้วย URL ตัวนี้ ซึ่งมันก็จะโชว์ข้อมูลจำลอง Json ออกมาประมาณนี้

คราวนี้เราลองเรียกตัว api ตัวใหม่นี้ดู โดยการเปิด URL ตัวนี้ เราก็จะพบว่าตัว api ของเรานั้นมันจะเอาค่าที่อยู่ใน appsettings.json มาแสดงให้เราเรียบร้อยแล้ว ตามรูปด้านล่าง

สุดท้ายเราก็จะลองเรียกตัว api ตัวเดิมดูว่ามันจะอ่านค่าอะไรกลับมาให้เรา ซึ่งเมื่อเราเรียก URL ไปเรียบร้อยเราก็จะได้ตามรูปด้านล่าง

ชอบ เกลียด โกรธ พบเนื้อหาผิด อ่านแล้ว งง อยากถาม ก็เข้ามาคุยกับ ดช.แมวน้ำ ได้ที่ นะฮ๊าฟ ฝากกดไลค์กดแชร์ด้วยก็ดีนะครับ 😍

🤠
https://localhost:5001/WeatherForecast
https://localhost:5001/WeatherForecast/secret
https://localhost:5001/WeatherForecast/secret
Saladpuk Facebook
🤠 Cloud Playground
7KB
saladpuk-demo.zip
archive
ASP.NET Core