มารู้จัก Filters ใน ASP.NET Core กัน

Wirawat Roj
2 min readMar 31, 2021

--

ASP.NET Core Filters | Design via Canva.com

สวัสดีครับ สำหรับบทความในครั้งนี้ผมจะหยิบเรื่อง Filters ใน ASP.NET Core มาเล่าให้ทุกคนรู้จักกันนะครับ เนื่องจากเมื่อไม่นานมานี้ ผมเพิ่งมีโอกาสได้ใช้ Filters ตัวนึง ในการทำงานและคิดว่า สิ่ง ๆ นี้น่าจะสามารถนำไปใช้งานต่อได้หลายแบบ จึงอยากหยิบมาเล่าต่อกันครับ

Filters คืออะไร ?

Filters ใน ASP.NET Core คือ การทำให้ code ของเราสามารถ run เพื่อทำงานอะไรบางอย่างในจังหวะก่อนหรือหลัง Stage การทำงานที่เราต้องการใน processing pipeline นั้น ๆ ได้ เช่น “ก่อนที่ก้อน request จะเข้าถึง business logic ใน controller ให้มีการเช็ค Basic Authentication ก่อน” หรือ “ต้องการ by pass ค่าบางอย่างในก้อน request ก่อนที่ request จะเข้าถึง controller”

ประเภทของ Filters

Filters ใน ASP.NET Core มีทั้งหมด 5 ประเภท โดยจะแบ่งออกตาม Stage การใช้งานที่แตกต่างกัน และมีลำดับขั้นในการทำงาน ดังนี้

Flow การทำงานของ Filters
  • Authorization Filter จะถูกรันเป็นตัวแรก และใช้สำหรับการจัดการเรื่อง Authentication เช่น การทำ Basic Authentication ก็จะสามารถทำได้ที่ Stage นี้
  • Resource Filter อยู่ถัดมาจาก Authorization Filter โดยใน Stage นี้สามารถทำการ bind model หรือ change model ที่ส่งเข้ามาได้ (เปลี่ยนแปลงตัว Request ได้เลย)
  • Action Filter อยู่ถัดมาจาก Resource Filter ซึ่งเป็น Stage ที่สามารถ Change argument ที่จะ pass เข้าไปทำ Action หรือ Change ผลลัพธ์ที่ออกมาจาก Action ได้ แต่จะไม่สามารถเปลี่ยน Model ที่ส่งเข้ามา (Request)ได้
  • Exception Filter สามารถใช้เพื่อจัดการกับ exception ที่ unhandled มาจาก action ก่อนที่ก้อน response จะถูกสร้างขึ้น
  • Result Filter สามารถใช้งานเพื่อจัดการกับ result ที่จะออกไป เช่นการทำ view การทำ formatter หรือการนำ result ไปทำอะไรก่อนที่จะกลับออกไป

โดยสามารถดู Diagram การทำงานของ Filters แต่ละตัว ได้อีกครั้งด้านล่าง

Filters in ASP.NET Core | Microsoft Docs

Implementation

เมื่อเลือกใช้งาน Filters ได้ถูกต้องแล้ว ขั้นตอนของการ implement ก็ไม่ยากแล้วครับ เพราะเราสามารถ implement Interface ของ Filter ที่เราต้องการ แล้วเขียน logic ของเราเข้าไปใน method ที่ implement จาก interface มาได้เลย

หลังจากนั้นเราก็ทำการ Inject Filter ของเราลงไปใน file startup และสามารถนำ Filter ไปใช้งานที่บนหัวของ method ใน Controller ได้เลย

ปล. Filters แต่ละตัว มีการเรียกใช้งานหลายวิธี สามารถศึกษาเพิ่มเติมได้จาก Docs เลยครับ

หมายเหตุ

บทความนี้มาจากการศึกษา และลองทำของผมเอง หากผิดพลาดประการใด สามารถให้คำแนะนำ และ ขออภัยมา ณ ที่นี้ด้วยครับ~

อ้างอิง

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-5.0
https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs
https://stackoverflow.com/questions/56274142/how-to-change-request-body-in-iactionfilter-in-asp-net-core

Special Thanks

ขอขอบคุณ “สำนักงานส่งเสริมเศรษฐกิจดิจิทัล (depa)” และคณาจารย์ “คณะเทคโนโลยีสารสนเทศ มจธ. (SIT)” ที่ให้การสนับสนุน “ทุนเพชรพระจอมเกล้าเพื่อพัฒนาเทคโนโลยีและนวัตกรรมดิจิทัล (KMUTT-depa)” ซึ่งเป็นทุนที่มอบความรู้ ทักษะและโอกาสดี ๆ กับผมอย่างมาก~

--

--

Wirawat Roj

Software Engineer | 🍔 Always hungry | ❤️ Love Coding