כיצד לעבוד עם HTTPHandlers ב- ASP.Net

HTTPhandler יכול להיות מוגדר כנקודת סיום שמבוצעת בתגובה לבקשה ומשמשת לטיפול בבקשות ספציפיות על בסיס הרחבות. מנוע זמן הריצה של ASP.Net בוחר את המטפל המתאים שיגיש בקשה נכנסת על בסיס סיומת הקובץ של כתובת ה- URL. נהפוך הוא, HttpModule הוא רכיב המהווה חלק מצינור עיבוד בקשות ASP.Net ונקרא בכל בקשה שמופנית ליישום שלך. שים לב שהמטרה הבסיסית של HTTPhandlers ו- HttpModules היא להזריק לוגיקה לעיבוד מראש לצינור.

נניח שהיישום שלך צריך להציג תמונות בגדלים שונים - אתה יכול לנצל את ה- HTTPhandler המותאם אישית כדי לשנות את גודל התמונות ולשלוח את התגובה בחזרה. תרחיש נוסף שבו ייתכן שתרצה להשתמש ב- HTTPhandler מותאם אישית הוא כאשר ברצונך לבצע לוגיקה מסוימת בעיבוד מראש ביישום שלך על סמך התוספים. למרות שאתה יכול לעשות כמעט כל דבר שתוכל לעשות עם HTTPhandler גם עם דף ASP.Net שלך, HTTPhandlers הם הרבה יותר ניידים לשימוש חוזר מדפי האינטרנט שלך.

כאשר בקשה למשאב מגיעה אל מנוע ASP.Net, תהליך העובד של ASP.Net מייצר בתורו את מטפל ה- HTTP המתאים לשרת את הבקשה על בסיס הרחבה. 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. באפשרותך להוסיף ולהסיר מטפלי HTTP באמצעות קטע התצורה בקובץ התצורה של היישומים שלך. כך תוכל לרשום את המטפל שלך בקובץ web.config של היישום.

  

אז מה עשינו כאן? זה עתה רישמנו את המטפל שלנו וציינו שאם תגיע בקשה להארכה של .idgaspx, יש לנתב את המבוקש אל ה- Http Handler המותאם אישית בשם CustomHTTPhandler.

שים לב שבניגוד לדפי אינטרנט של .aspx, למטפלי HTTP אין אלמנטים חזותיים. אתה יכול ליצור את HTTP מטפלים שלך בספרייה מותאמת אישית ואז להשתמש בהם שוב וכאשר הם נדרשים.

HTTPHandlers אסינכרוני

הגרסאות החדשות יותר של ASP.Net מספקות תמיכה למטפלי Http אסינכרוניים. באפשרותך לנצל את async / wait ו- TPL כדי לבנות HTTP מטפלים אסינכרוניים ב- ASP.Net. כדי ליצור מטפל HTTP אסינכרוני מותאם אישית, עליך לרשת את המחלקה HttpTaskAsyncHandler. מעמד האבסטרקט HttpTaskAsyncHandler מיישם בתורו את ממשקי ה- IHttpAsyncHandler ו- IHTTP. קטע הקוד הבא ממחיש כיצד נראה HTTP האסינכרוני המותאם אישית שלנו במבט ראשון.

   public class CustomHTTPhandler : HttpTaskAsyncHandler

   {

       public override Task ProcessRequestAsync(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }