หลังจากอ่านเกี่ยวกับ middlware หลักของ asp.net ฉันรู้สึกสับสนว่าเมื่อใดที่ฉันควรใช้ตัวกรองและฉันควรใช้มิดเดิลแวร์เมื่อใดเนื่องจากดูเหมือนว่าจะบรรลุเป้าหมายเดียวกัน เมื่อใดควรใช้มิดเดิลแวร์แทนฟิตเลอร์
หลังจากอ่านเกี่ยวกับ middlware หลักของ asp.net ฉันรู้สึกสับสนว่าเมื่อใดที่ฉันควรใช้ตัวกรองและฉันควรใช้มิดเดิลแวร์เมื่อใดเนื่องจากดูเหมือนว่าจะบรรลุเป้าหมายเดียวกัน เมื่อใดควรใช้มิดเดิลแวร์แทนฟิตเลอร์
คำตอบ:
มีวิดีโอเกี่ยวกับเรื่องนี้ในช่อง 9 เป็น: ASP.NET มอนสเตอร์ # 91: มิดเดิ้ลกับตัวกรอง สรุปวิดีโอ:
การดำเนินการตามคำขอเริ่มต้นขึ้นและเรามีมิดเดิลแวร์และมิดเดิลแวร์อีกตัวหนึ่งคิดว่ามันเหมือนกับ "ตุ๊กตารัสเซียในตุ๊กตา" และในที่สุดมิดเดิลแวร์ที่กำหนดเส้นทางก็เริ่มเข้ามาจากนั้นคำขอจะเข้าสู่ MVC pipline
ดังนั้นถ้าคุณไม่จำเป็นต้องมีบริบทของ MVC นี้ (สมมติว่าคุณกำลังกังวลเกี่ยวกับการไหลและการดำเนินการเช่นเดียวกับการตอบสนองต่อหัวบางกลไกก่อนเส้นทางอื่น ๆ ) จากนั้นใช้middlewares
แต่ถ้าคุณจำเป็นต้องมีบริบทของ MVC และคุณต้องการที่จะดำเนินการกับการกระทำนั้นใช้ฟิลเตอร์
มิดเดิลแวร์ทำงานในระดับของ ASP.NET Core และสามารถดำเนินการกับทุกคำขอเดียวที่เข้ามาในแอปพลิเคชัน
ในทางกลับกันตัวกรอง MVC จะทำงานสำหรับคำขอที่มาถึง MVC เท่านั้น
ตัวอย่างเช่นหากฉันต้องการบังคับให้คำขอทั้งหมดต้องทำผ่าน HTTPS ฉันจะต้องใช้มิดเดิลแวร์สำหรับสิ่งนั้น หากฉันสร้างตัวกรอง MVC ที่ทำเช่นนั้นผู้ใช้ยังคงสามารถขอเช่นไฟล์คงที่ผ่าน HTTP
แต่ในทางกลับกันสิ่งที่บันทึกระยะเวลาการร้องขอในตัวควบคุม MVC อาจเป็นตัวกรองการดำเนินการได้
การดำเนินการmiddleware
เกิดขึ้นก่อนบริบท MVC จะพร้อมใช้งานในไปป์ไลน์ นั่นคือmiddleware
ไม่มีสิทธิ์เข้าถึงActionExecutingContext
หรือActionExecutedContext
ในกรณีของ ActionFilter เช่น สิ่งที่คุณสามารถเข้าถึงได้คือHttpContext
ซึ่งจะช่วยให้คุณดำเนินการตามคำขอและการตอบกลับ เนื่องจากการผูกโมเดลยังไม่เกิดขึ้นการใช้มิดเดิลแวร์จึงไม่เหมาะกับการเรียกใช้ฟังก์ชันตรวจสอบความถูกต้องหรือแก้ไขค่า Middleware
จะทำงานตามคำขอทุกครั้งไม่ว่าจะเรียกตัวควบคุมหรือการดำเนินการใดก็ตาม
ในทางกลับกันfilters
จะรันเฉพาะการกระทำและคอนโทรลเลอร์ที่ระบุเว้นแต่คุณจะลงทะเบียนตัวกรองทั่วโลกในการเริ่มต้น เนื่องจากคุณสามารถเข้าถึงบริบทได้อย่างสมบูรณ์คุณจึงสามารถเข้าถึงตัวควบคุมและดำเนินการเองได้
ที่มาและตัวอย่าง: dotnetcultist.com