วิธีทำงานกับ HTTPHandlers ใน ASP.Net

HTTPhandler อาจถูกกำหนดให้เป็นจุดสิ้นสุดที่ดำเนินการเพื่อตอบสนองต่อคำขอและใช้เพื่อจัดการกับคำขอเฉพาะตามส่วนขยาย เอ็นจินรันไทม์ ASP.Net เลือกตัวจัดการที่เหมาะสมเพื่อตอบสนองคำขอขาเข้าตามนามสกุลไฟล์ของ URL คำขอ ในทางตรงกันข้าม HttpModule เป็นส่วนประกอบที่เป็นส่วนหนึ่งของไปป์ไลน์การประมวลผลคำขอ ASP.Net และถูกเรียกในทุกคำขอที่ส่งไปยังแอปพลิเคชันของคุณ โปรดทราบว่าวัตถุประสงค์พื้นฐานของทั้ง HTTPhandlers และ HttpModules คือการแทรกตรรกะก่อนการประมวลผลไปยังไปป์ไลน์

สมมติว่าแอปพลิเคชันของคุณต้องแสดงภาพที่มีขนาดแตกต่างกันคุณสามารถใช้ประโยชน์จาก HTTPhandler ที่กำหนดเองเพื่อปรับขนาดภาพเหล่านั้นและส่งการตอบกลับกลับไป อีกสถานการณ์หนึ่งที่คุณอาจต้องการใช้ HTTPhandler แบบกำหนดเองคือเมื่อคุณต้องการเรียกใช้ตรรกะก่อนการประมวลผลบางอย่างในแอปพลิเคชันของคุณตามส่วนขยาย แม้ว่าคุณจะสามารถทำเกือบทุกอย่างที่คุณสามารถทำได้ด้วย HTTPhandler กับหน้า ASP.Net ของคุณ แต่ HTTPhandlers นั้นพกพาได้และนำกลับมาใช้ใหม่ได้มากกว่าหน้าเว็บของคุณ

เมื่อมีการร้องขอทรัพยากรมาที่ ASP.Net Engine กระบวนการของ ASP.Net Worker จะทำให้ HTTPhandler ที่เหมาะสมส่งไปยังเซิร์ฟเวอร์คำขอตามส่วนขยาย HTTPhandler ใน ASP.Net เป็นคลาสที่ใช้อินเทอร์เฟซ IHTTPhandler อนึ่งอินเทอร์เฟซ IHTTPhandler มีอยู่ในเนมสเปซ System.Web โปรดทราบว่า PageHandlerFactory ใช้อินเทอร์เฟซ IHTTPhandlerFactory และมีเมธอดที่เรียกว่า GetHandler ซึ่งจะรับผิดชอบในการส่งคืนตัวจัดการที่เหมาะสมไปยังเซิร์ฟเวอร์ตามคำขอนั้น ๆ

MSDN ระบุ: "ASP.Net HTTPhandler คือกระบวนการ (มักเรียกว่า" ปลายทาง ") ที่ทำงานเพื่อตอบสนองต่อคำร้องขอที่ส่งไปยังแอปพลิเคชันเว็บ ASP.Net ตัวจัดการที่พบมากที่สุดคือตัวจัดการเพจ ASP.Net ที่ประมวลผลไฟล์. aspx เมื่อผู้ใช้ร้องขอไฟล์. aspx คำร้องขอจะถูกประมวลผลโดยเพจผ่านตัวจัดการเพจ "

การสร้าง HTTPhandler แบบกำหนดเอง

ในส่วนนี้เราจะสำรวจวิธีสร้าง HTTPhandler แบบกำหนดเองใน ASP.Net ในการสร้าง HTTPhandler ที่กำหนดเองให้สร้างคลาสที่ใช้งาน IHTTPhandler ตามที่แสดงในข้อมูลโค้ดด้านล่าง

namespace CustomHTTPhandler

{

   public class CustomHTTPhandler : IHTTPhandler

   {

       public bool IsReusable

       {

           get { return false; }

       }

       public void ProcessRequest(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }

}

โปรดทราบว่าตัวจัดการ HTTP ที่กำหนดเองของคุณควรมีคุณสมบัติที่เรียกว่า IsReusable และวิธีการที่เรียกว่า ProcessRequest แม้ว่าแบบเดิมจะใช้เพื่อระบุว่าสามารถใช้ตัวจัดการซ้ำได้หรือไม่ แต่วิธีหลังเป็นวิธีการประมวลผลจริงสำหรับคุณ โดยพื้นฐานแล้ว HTTPHandler ที่กำหนดเองควรใช้อินเทอร์เฟซ IHttphandler และกำหนดสมาชิกทั้งสองนี้

การลงทะเบียนตัวจัดการของคุณ

ข้อมูลการแม็พสำหรับ HTTPhandlers มีอยู่ในไฟล์คอนฟิกูเรชัน ต่อไปนี้เป็นลักษณะของไฟล์ machine.config ของคุณ

ตอนนี้คุณจะต้องแจ้งให้รันไทม์ทราบด้วยว่าเมื่อใดควรเรียกใช้ HTTPhandler ที่กำหนดเองของคุณ คุณควรระบุสิ่งนี้ที่ไหน? สามารถระบุรายละเอียดดังกล่าวในไฟล์ web.config คุณสามารถเพิ่มและลบ HTTPhandlers โดยใช้ส่วนการกำหนดค่าในไฟล์คอนฟิกูเรชันแอปพลิเคชันของคุณ นี่คือวิธีลงทะเบียนตัวจัดการของคุณในไฟล์ web.config ของแอปพลิเคชัน

  

แล้วเรามาทำอะไรที่นี่? เราเพิ่งลงทะเบียนตัวจัดการของเราและระบุว่าหากมีคำขอส่วนขยายของ. idgaspx มาถึงคำขอดังกล่าวควรถูกส่งไปยัง Http Handler ที่กำหนดเองชื่อ CustomHTTPhandler

โปรดทราบว่าต่างจากหน้าเว็บ. aspx ที่ HTTPhandlers ไม่มีองค์ประกอบภาพ คุณสามารถสร้าง HTTPhandlers ของคุณในไลบรารีที่กำหนดเองจากนั้นนำมาใช้ใหม่เมื่อจำเป็น

HTTPHandlers แบบอะซิงโครนัส

ASP.Net เวอร์ชันใหม่กว่าให้การสนับสนุนสำหรับตัวจัดการ Http แบบอะซิงโครนัส คุณสามารถใช้ประโยชน์จาก async / await และ TPL เพื่อสร้างตัวจัดการ HTTP แบบอะซิงโครนัสใน ASP.Net ในการสร้าง HTTPhandler แบบอะซิงโครนัสแบบกำหนดเองคุณควรสืบทอดคลาส HttpTaskAsyncHandler คลาสนามธรรม HttpTaskAsyncHandler จะใช้อินเทอร์เฟซ IHttpAsyncHandler และ IHTTPhandler ข้อมูลโค้ดต่อไปนี้แสดงให้เห็นว่า HTTPhandler แบบอะซิงโครนัสที่กำหนดเองของเรามีลักษณะอย่างไรในตอนแรก

   public class CustomHTTPhandler : HttpTaskAsyncHandler

   {

       public override Task ProcessRequestAsync(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }