Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การใช้งานเมธอด Configure() ของคลาส Startup ใน C# ASP.NET Core

เมธอด Configure อยู่ภายในคลاس Startup ของแอปพลิเคชัน ASP.NET Core

เมธอด Configure เป็นจุดที่คุณสามารถกำหนดค่า Application Request Pipeline สำหรับแอปพลิเคชันของคุณได้ โดยใช้อินสแตนซ์ IApplicationBuilder ที่จัดเตรียมโดยคอนเทนเนอร์ IoC มาตรฐาน

เมธอด Configure โดยค่าเริ่มต้นมีพารามิเตอร์ 3 ตัว ได้แก่ IApplicationBuilder, IWebHostEnvironment และ ILoggerFactory

ในขณะรันไทม์ เมธอด ConfigureServices จะถูกเรียกก่อนเมธอด Configure เพื่อลงทะเบียน Custom Service กับคอนเทนเนอร์ IoC ซึ่งสามารถใช้ในเมธอด Configure ได้

  • IWebHostEnvironment: จัดเตรียมข้อมูลเกี่ยวกับสภาพแวดล้อมการโฮสต์เว็บที่แอปพลิเคชันกำลังรันอยู่
  • IApplicationBuilder: กำหนดคลาสที่จัดเตรียมกลไกในการกำหนดค่า Request Pipeline ของแอปพลิเคชัน

ตัวอย่างเมธอด Configure() แบบสมัยใหม่ (ASP.NET Core 3.0+)

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
    if (env.IsDevelopment()) {
        app.UseDeveloperExceptionPage();
    } else {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();
    app.UseAuthorization();
    
    app.UseEndpoints(endpoints => {
        endpoints.MapRazorPages();
        endpoints.MapControllers();
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

ลำดับของ Middleware สำคัญ

ลำดับการเพิ่ม Middleware ใน Pipeline มีความสำคัญ:

  1. UseExceptionHandler / UseDeveloperExceptionPage - จัดการข้อผิดพลาด (ควรอยู่บนสุด)
  2. UseHsts - HTTP Strict Transport Security
  3. UseHttpsRedirection - บังคับ HTTPS
  4. UseStaticFiles - เสิร์ฟไฟล์ Static
  5. UseRouting - Routing Middleware
  6. UseAuthentication - Authentication (ถ้ามี)
  7. UseAuthorization - Authorization
  8. UseEndpoints - Endpoint Routing (จุดสิ้นสุด)

การใช้งาน IWebHostEnvironment

สามารถตรวจสอบ Environment ได้หลายแบบ:

if (env.IsDevelopment()) { ... }
if (env.IsStaging()) { ... }
if (env.IsProduction()) { ... }
if (env.IsEnvironment("Testing")) { ... }