כיצד לעבוד עם HttpModules ב- ASP.NET

ישנן שתי דרכים בהן ניתן להזריק לוגיקה בצינור הבקשה של יישום ASP.NET - HttpHandlers ו- HttpModules. HttpModule הוא רכיב המהווה חלק מצינור עיבוד בקשות ASP.NET ונקרא בכל בקשה שמופנית ליישום שלך.

שים לב כי ל- HttpModules יכולה להיות גישה לאירועי מחזור החיים של בקשה, ולכן הם יכולים לשמש גם לשינוי התגובה. HttpModules משמשים בדרך כלל לחיבור חששות חוצה חיתוך כמו אבטחה, רישום וכו 'בצינור עיבוד הבקשה וניתן להשתמש בהם גם לכתיבה מחדש של כתובות אתרים ואפילו ליצירת כותרות מותאמות אישית בתגובה.

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

כדי ליצור HttpModule מותאם אישית, עליך ליצור מחלקה המיישמת את ממשק System.Web.IHttpModule. כדי ליצור HttpModule, בצע את הצעדים הבאים:

  1. פתח את Visual Studio IDE
  2. לחץ על קובץ-> פרויקט חדש
  3. צור פרויקט ספריית כיתה
  4. הוסף התייחסות להרכבת System.Web לפרויקט זה
  5. לאחר מכן, צור מחלקה בתוך פרויקט זה המיישמת את ממשק IHttpModule
  6. כתוב מטפל לשיטת Init כדי לאתחל את המודול שלך ולהירשם לאירוע אחד או יותר
  7. לחלופין, הטמיע שיטת Dispose במודול המותאם אישית שלך

במבט ראשון, HttpModule המותאם אישית שלנו נראה כך:

מחלקה ציבורית CustomHttpModule: IHttpModule

   {

       חלל ציבורי הרחק ()

       {

           לזרוק NotImplementedException חדש ();

       }

       חלל ציבורי ראשוני (הקשר HttpApplication)

       {

           לזרוק NotImplementedException חדש ();

       }

   }

קטע הקוד הבא מראה כיצד ניתן להירשם לאירועים במודול ה- HTTP המותאם אישית שלך.

חלל ציבורי ראשוני (הקשר HttpApplication)

       {

           context.BeginRequest + = EventHandler חדש (OnBeginRequest);

           context.EndRequest + = EventHandler חדש (OnEndRequest);            

           context.LogRequest + = EventHandler חדש (OnLogRequest);

       }

בואו כעת נכתוב את הקוד לשיטת OnLogRequest. שיטה זו נועדה לתעד את הנתיב או כל בקשה לקובץ טקסט. כך אמורה להראות שיטת OnLogRequest:

חלל ציבורי OnLogRequest (שולח האובייקט, EventArgs e)

       {

           HttpContext context = ((HttpApplication) שולח) .Context;

           מחרוזת filePath = @ "D: \ Log.txt";

           באמצעות (StreamWriter streamWriter = StreamWriter חדש (filePath))

           {

               streamWriter.WriteLine (context.Request.Path);

           }

       }

רישום הקוד הבא ממחיש את מודול ה- HTTP המותאם אישית השלם.

מחלקה ציבורית CustomModule: IHttpModule

   {

       חלל ציבורי ראשוני (הקשר HttpApplication)

       {

           context.BeginRequest + = EventHandler חדש (OnBeginRequest);

           context.EndRequest + = EventHandler חדש (OnEndRequest);          

           context.LogRequest + = EventHandler חדש (OnLogRequest);

       }

       חלל ציבורי OnLogRequest (שולח האובייקט, EventArgs e)

       {

           HttpContext context = ((HttpApplication) שולח) .Context;

           מחרוזת filePath = @ "D: \ Log.txt";

           באמצעות (StreamWriter streamWriter = StreamWriter חדש (filePath))

           {

               streamWriter.WriteLine (context.Request.Path);

           }

       }

       חלל ציבורי OnBeginRequest (שולח האובייקט, EventArgs e)

       {

           // כתוב את הקוד המותאם אישית שלך כאן

       }

       חלל ציבורי OnEndRequest (שולח אובייקט, EventArgs e)

       {

           // כתוב את הקוד המותאם אישית שלך כאן

       }

       חלל ציבורי הרחק ()

       {

           // כתוב כאן את הקוד המותאם אישית שלך כדי לסלק אובייקטים במידת הצורך

       }

   }

השלב הבא הוא להשתמש במודול HTTP המותאם אישית. לשם כך יש ליצור פרויקט נוסף (הפעם, פרויקט יישום ASP.NET). ראשית, בנה את הפתרון והוסף התייחסות למודול ה- HTTP המותאם אישית שיצרנו זה עתה.

לאחר מכן, יהיה עליך לרשום את מודול ה- HTTP המותאם אישית בקובץ web.config. קטע הקוד הבא ממחיש כיצד ניתן לרשום את מודול ה- HTTP המותאם אישית.

וזה כל מה שאתה צריך לעשות כדי להשתמש במודול ה- HTTP המותאם אישית שלך.

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

כדי ליישם אסינכרון במודול ה- HTTP המותאם אישית שלך, תרצה למנף את מחלקת EventHandlerTaskAsyncHelper הזמינה כחלק מ- NET Framework 4.5. קטע הקוד הבא ממחיש כיצד תוכלו לנצל מחלקה זו כדי להירשם לאירועים בשיטת Init של מודול ה- HTTP המותאם אישית שלכם. שים לב ששיטת LogRequest צריכה להחזיר מופע מסוג משימה.

חלל ציבורי ראשוני (הקשר HttpApplication)

       {

           EventHandlerTaskAsyncHelper asyncHelperObject = EventHandlerTaskAsyncHelper חדש (LogRequest);

           context.AddOnPostAuthorizeRequestAsync (asyncHelperObject.BeginEventHandler, asyncHelperObject.EndEventHandler);

       }

הנה רשימת הקוד המלאה של הגרסה האסינכרונית של מודול ה- HTTP המותאם אישית שלנו.

מחלקה ציבורית CustomModule: IHttpModule

   {

       חלל ציבורי ראשוני (הקשר HttpApplication)

       {

           EventHandlerTaskAsyncHelper asyncHelperObject = EventHandlerTaskAsyncHelper חדש (LogRequest);

      context.AddOnPostAuthorizeRequestAsync (asyncHelperObject.BeginEventHandler, asyncHelperObject.EndEventHandler);

       }

       פרטי async משימת LogRequest (שולח אובייקט, EventArgs e)

       {

           HttpContext context = ((HttpApplication) שולח) .Context;

           מחרוזת filePath = @ "D: \ Log.txt";

            באמצעות (StreamWriter streamWriter = StreamWriter חדש (filePath, נכון))

           {

               לחכות streamWriter.WriteLineAsync (context.Request.Path);

           }

       }

   }

כיצד לעשות יותר ב- ASP.NET וב- ASP.NET Core:

  • כיצד להשתמש במטמון בזיכרון ב- ASP.NET Core
  • כיצד לטפל בשגיאות ב- ASP.NET Web API
  • כיצד להעביר מספר פרמטרים לשיטות בקר API API
  • כיצד לרשום מטא נתונים של בקשה ותגובה ב- ASP.NET Web API
  • כיצד לעבוד עם HttpModules ב- ASP.NET
  • גרסאות מתקדמות ב- ASP.NET Core API
  • כיצד להשתמש בהזרקת תלות בליבת ASP.NET
  • כיצד לעבוד עם הפעלות ב- ASP.NET
  • כיצד לעבוד עם HTTPHandlers ב- ASP.NET
  • כיצד להשתמש ב- IHostedService ב- ASP.NET Core
  • כיצד לצרוך שירות WCF SOAP בליבה של ASP.NET
  • כיצד לשפר את הביצועים של יישומי ליבת ASP.NET
  • כיצד לצרוך ASP.NET Core API API באמצעות RestSharp
  • כיצד לעבוד עם כניסה לליבה ASP.NET
  • כיצד להשתמש ב- MediatR בליבת ASP.NET
  • כיצד לעבוד עם מצב הפעלה ב- ASP.NET Core
  • כיצד להשתמש בננסי ב- ASP.NET Core
  • הבן את קשירת הפרמטרים ב- ASP.NET Web API
  • כיצד להעלות קבצים ב- ASP.NET Core MVC
  • כיצד ליישם טיפול חריגים גלובלי ב- ASP.NET Core API
  • כיצד ליישם בדיקות בריאות ב- ASP.NET Core
  • שיטות עבודה מומלצות במטמון ב- ASP.NET
  • כיצד להשתמש בהודעות של Apache Kafka ב- .NET
  • כיצד להפעיל את CORS ב- API האינטרנט שלך
  • מתי להשתמש ב- WebClient לעומת HttpClient לעומת HttpWebRequest
  • כיצד לעבוד עם מטמון Redis ב- .NET
  • מתי להשתמש ב- Task.WaitAll לעומת Task.WhenAll ב- .NET