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

C# ASP.NET Core Middleware แตกต่างจาก HttpModule อย่างไร


HttpModules ได้รับการกำหนดค่าผ่าน web.config หรือ global.asaxDeveloper ไม่มีการควบคุมลำดับการดำเนินการ

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

HttpModules ช่วยให้คุณแนบโค้ดเฉพาะกับเหตุการณ์ของแอปพลิเคชันได้ HttpModules เชื่อมโยงกับ System.web

มิดเดิลแวร์ได้รับการกำหนดค่าในโค้ด Startup.cs แทนที่จะเป็นไฟล์ web.config (จุดเข้าใช้งานสำหรับแอปพลิเคชัน)

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

ลำดับของมิดเดิลแวร์สำหรับการตอบกลับเป็นสิ่งที่ตรงกันข้ามกับคำขอ

มิดเดิลแวร์ไม่ขึ้นกับเหตุการณ์เหล่านี้

Middlewares เป็นอิสระจากโฮสต์

สร้างขึ้นใน Middlewares ของ Asp.Net core

การตรวจสอบสิทธิ์ ให้การสนับสนุนการตรวจสอบสิทธิ์

CORS กำหนดค่าการแบ่งปันทรัพยากรข้ามต้นทาง

การกำหนดเส้นทาง กำหนดและจำกัดเส้นทางคำขอ

เซสชัน ให้การสนับสนุนสำหรับการจัดการเซสชันผู้ใช้

การวินิจฉัย รวมการสนับสนุนหน้าข้อผิดพลาดและข้อมูลรันไทม์

ตัวอย่าง

public class MyMiddleware{
   private readonly RequestDelegate _next;
   private readonly ILogger _logger;
   public MyMiddleware(RequestDelegate next, ILoggerFactory logFactory){
      _next = next;
      _logger = logFactory.CreateLogger("MyMiddleware");
   }
   public async Task Invoke(HttpContext httpContext){
      _logger.LogInformation("MyMiddleware executing..");
      await _next(httpContext); // calling next middleware
   }
}

// วิธีการขยายที่ใช้เพื่อเพิ่มมิดเดิลแวร์ไปยังไปป์ไลน์คำขอ HTTP

public static class MyMiddlewareExtensions{
   public static IApplicationBuilder UseMyMiddleware(this IApplicationBuilder
   builder){
      return builder.UseMiddleware<MyMiddleware>();
   }
}

//เพิ่มมิดเดิลแวร์ที่กำหนดเองในไปป์ไลน์คำขอโดยใช้วิธีการขยายตามที่แสดงด้านล่าง

public void Configure(IApplicationBuilder app, IHostingEnvironment env){
   app.UseMiddleware<MyMiddleware>()
   app.Run(async (context) =>{
      await context.Response.WriteAsync("Hello World!");
   });
}