มิดเดิลแวร์หลักของ asp.net เทียบกับตัวกรอง


89

หลังจากอ่านเกี่ยวกับ middlware หลักของ asp.net ฉันรู้สึกสับสนว่าเมื่อใดที่ฉันควรใช้ตัวกรองและฉันควรใช้มิดเดิลแวร์เมื่อใดเนื่องจากดูเหมือนว่าจะบรรลุเป้าหมายเดียวกัน เมื่อใดควรใช้มิดเดิลแวร์แทนฟิตเลอร์


1
เอกสารนี้กำหนดเป้าหมายคำถามเฉพาะนั้น docs.microsoft.com/en-us/aspnet/core/mvc/controllers/…
Nkosi

คำตอบ:


83

มีวิดีโอเกี่ยวกับเรื่องนี้ในช่อง 9 เป็น: ASP.NET มอนสเตอร์ # 91: มิดเดิ้ลกับตัวกรอง สรุปวิดีโอ:

การดำเนินการตามคำขอเริ่มต้นขึ้นและเรามีมิดเดิลแวร์และมิดเดิลแวร์อีกตัวหนึ่งคิดว่ามันเหมือนกับ "ตุ๊กตารัสเซียในตุ๊กตา" และในที่สุดมิดเดิลแวร์ที่กำหนดเส้นทางก็เริ่มเข้ามาจากนั้นคำขอจะเข้าสู่ MVC pipline ป้อนคำอธิบายภาพที่นี่ ดังนั้นถ้าคุณไม่จำเป็นต้องมีบริบทของ MVC นี้ (สมมติว่าคุณกำลังกังวลเกี่ยวกับการไหลและการดำเนินการเช่นเดียวกับการตอบสนองต่อหัวบางกลไกก่อนเส้นทางอื่น ๆ ) จากนั้นใช้middlewares
แต่ถ้าคุณจำเป็นต้องมีบริบทของ MVC และคุณต้องการที่จะดำเนินการกับการกระทำนั้นใช้ฟิลเตอร์


ดังนั้นหากฉันมีตรรกะที่ฉันต้องการเรียกใช้ทุกคำขอ (เช่นการบันทึก) เฉพาะบางส่วนที่เกี่ยวข้องกับ MVC ฉันจะใส่สิ่งนั้นไว้ในมิดเดิลแวร์จากนั้นให้ตัวจัดการตัวกรองทำตามตรรกะเฉพาะที่อาจจำเป็นสำหรับมัน เปลี่ยนเป็นมิดเดิลแวร์?
Terry H

69

มิดเดิลแวร์ทำงานในระดับของ ASP.NET Core และสามารถดำเนินการกับทุกคำขอเดียวที่เข้ามาในแอปพลิเคชัน

ในทางกลับกันตัวกรอง MVC จะทำงานสำหรับคำขอที่มาถึง MVC เท่านั้น

ตัวอย่างเช่นหากฉันต้องการบังคับให้คำขอทั้งหมดต้องทำผ่าน HTTPS ฉันจะต้องใช้มิดเดิลแวร์สำหรับสิ่งนั้น หากฉันสร้างตัวกรอง MVC ที่ทำเช่นนั้นผู้ใช้ยังคงสามารถขอเช่นไฟล์คงที่ผ่าน HTTP

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


5

การดำเนินการmiddlewareเกิดขึ้นก่อนบริบท MVC จะพร้อมใช้งานในไปป์ไลน์ นั่นคือmiddlewareไม่มีสิทธิ์เข้าถึงActionExecutingContextหรือActionExecutedContextในกรณีของ ActionFilter เช่น สิ่งที่คุณสามารถเข้าถึงได้คือHttpContextซึ่งจะช่วยให้คุณดำเนินการตามคำขอและการตอบกลับ เนื่องจากการผูกโมเดลยังไม่เกิดขึ้นการใช้มิดเดิลแวร์จึงไม่เหมาะกับการเรียกใช้ฟังก์ชันตรวจสอบความถูกต้องหรือแก้ไขค่า Middlewareจะทำงานตามคำขอทุกครั้งไม่ว่าจะเรียกตัวควบคุมหรือการดำเนินการใดก็ตาม

ในทางกลับกันfiltersจะรันเฉพาะการกระทำและคอนโทรลเลอร์ที่ระบุเว้นแต่คุณจะลงทะเบียนตัวกรองทั่วโลกในการเริ่มต้น เนื่องจากคุณสามารถเข้าถึงบริบทได้อย่างสมบูรณ์คุณจึงสามารถเข้าถึงตัวควบคุมและดำเนินการเองได้

ที่มาและตัวอย่าง: dotnetcultist.com

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.