Προγραμματισμός

Πώς να εργαστείτε με HttpModules στο ASP.NET

Υπάρχουν δύο τρόποι με τους οποίους μπορείτε να εισάγετε λογική στον αγωγό αιτήσεων μιας εφαρμογής ASP.NET - HttpHandlers και HttpModules. Ένα HttpModule είναι ένα στοιχείο που αποτελεί μέρος του αγωγού επεξεργασίας αιτημάτων ASP.NET και καλείται σε κάθε αίτημα που υποβάλλεται στην εφαρμογή σας.

Σημειώστε ότι το HttpModules μπορεί να έχει πρόσβαση στα συμβάντα κύκλου ζωής ενός αιτήματος και ως εκ τούτου μπορεί να χρησιμοποιηθεί και για την τροποποίηση της απόκρισης. Τα HttpModules χρησιμοποιούνται γενικά για τη σύνδεση των εγκάρσιων ζητημάτων όπως η ασφάλεια, η καταγραφή κ.λπ. στον αγωγό επεξεργασίας αιτημάτων και μπορούν επίσης να χρησιμοποιηθούν για την επανεγγραφή URL και ακόμη και για τη δημιουργία προσαρμοσμένων κεφαλίδων στην απόκριση.

Όπως αναφέρει η τεκμηρίωση της Microsoft, «Μια λειτουργική μονάδα HTTP είναι ένα συγκρότημα που καλείται σε κάθε αίτημα που υποβάλλεται στην εφαρμογή σας. Οι ενότητες HTTP καλούνται ως μέρος του αγωγού αίτησης ASP.NET και έχουν πρόσβαση σε συμβάντα κύκλου ζωής καθ 'όλη τη διάρκεια του αιτήματος. Οι ενότητες HTTP σάς επιτρέπουν να εξετάζετε εισερχόμενα και εξερχόμενα αιτήματα και να λαμβάνετε μέτρα βάσει του αιτήματος. "

Για να δημιουργήσετε ένα προσαρμοσμένο HttpModule, θα πρέπει να δημιουργήσετε μια κλάση που εφαρμόζει τη διεπαφή System.Web.IHttpModule. Για να δημιουργήσετε ένα HttpModule, ακολουθήστε τα εξής βήματα:

  1. Ανοίξτε το Visual Studio IDE
  2. Κάντε κλικ στο Αρχείο-> Νέο έργο
  3. Δημιουργήστε ένα έργο βιβλιοθήκης τάξης
  4. Προσθέστε αναφορά στο συγκρότημα System.Web σε αυτό το έργο
  5. Στη συνέχεια, δημιουργήστε μια τάξη μέσα σε αυτό το έργο που εφαρμόζει τη διεπαφή IHttpModule
  6. Γράψτε έναν χειριστή για τη μέθοδο Init για να ξεκινήσετε την ενότητα σας και να εγγραφείτε σε ένα ή περισσότερα συμβάντα
  7. Προαιρετικά, εφαρμόστε μια μέθοδο διάθεσης στην προσαρμοσμένη λειτουργική σας μονάδα

Με την πρώτη ματιά, το προσαρμοσμένο HttpModule μοιάζει με αυτό:

δημόσια τάξη CustomHttpModule: IHttpModule

   {

δημόσιο κενό Απορρίψτε ()

       {

ρίξτε νέο NotImplementedException ();

       }

public void Init (HttpΕφαρμογή περιβάλλοντος)

       {

ρίξτε νέο NotImplementedException ();

       }

   }

Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να εγγραφείτε σε συμβάντα στην προσαρμοσμένη ενότητα HTTP.

public void Init (HttpΕφαρμογή περιβάλλοντος)

       {

konteks.BeginRequest + = νέο EventHandler (OnBeginRequest);

konteks.EndRequest + = νέο EventHandler (OnEndRequest);

konteks.LogRequest + = νέο EventHandler (OnLogRequest);

       }

Ας γράψουμε τώρα τον κωδικό για τη μέθοδο OnLogRequest. Αυτή η μέθοδος προορίζεται να καταγράψει τη διαδρομή ή κάθε αίτημα σε ένα αρχείο κειμένου. Δείτε πώς πρέπει να φαίνεται η μέθοδος OnLogRequest:

public void OnLogRequest (αποστολέας αντικειμένου, EventArgs e)

       {

HttpContext konteks = ((HttpApplication) αποστολέας). Context;

string filePath = @ "D: \ Log.txt";

χρησιμοποιώντας (StreamWriter streamWriter = νέο StreamWriter (filePath))

           {

streamWriter.WriteLine (konteks.Request.Path);

           }

       }

Η ακόλουθη λίστα κωδικών απεικονίζει την πλήρη προσαρμοσμένη ενότητα HTTP.

δημόσια τάξη CustomModule: IHttpModule

   {

public void Init (HttpΕφαρμογή περιβάλλοντος)

       {

konteks.BeginRequest + = νέο EventHandler (OnBeginRequest);

konteks.EndRequest + = νέο EventHandler (OnEndRequest);

konteks.LogRequest + = νέο EventHandler (OnLogRequest);

       }

public void OnLogRequest (αποστολέας αντικειμένου, EventArgs e)

       {

HttpContext konteks = ((HttpApplication) αποστολέας). Context;

string filePath = @ "D: \ Log.txt";

χρησιμοποιώντας (StreamWriter streamWriter = νέο StreamWriter (filePath))

           {

streamWriter.WriteLine (konteks.Request.Path);

           }

       }

δημόσιο κενό OnBeginRequest (αποστολέας αντικειμένου, EventArgs e)

       {

// Γράψτε τον προσαρμοσμένο κωδικό σας εδώ

       }

public void OnEndRequest (αποστολέας αντικειμένου, EventArgs e)

       {

// Γράψτε τον προσαρμοσμένο κωδικό σας εδώ

       }

δημόσιο κενό Απορρίψτε ()

       {

// Γράψτε τον προσαρμοσμένο κωδικό σας εδώ για να απορρίψετε τυχόν αντικείμενα εάν χρειαστεί

       }

   }

Το επόμενο βήμα είναι να χρησιμοποιήσετε την προσαρμοσμένη μονάδα HTTP. Για να το κάνετε αυτό, δημιουργήστε ένα άλλο έργο (αυτή τη φορά, ένα έργο εφαρμογής ASP.NET). Αρχικά, δημιουργήστε τη λύση και προσθέστε αναφορά στην προσαρμοσμένη μονάδα HTTP που μόλις δημιουργήσαμε.

Στη συνέχεια, θα πρέπει να καταχωρήσετε την προσαρμοσμένη μονάδα HTTP στο αρχείο web.config. Το παρακάτω απόσπασμα κώδικα δείχνει τον τρόπο καταχώρισης της προσαρμοσμένης μονάδας HTTP.

Και αυτό πρέπει να κάνετε για να χρησιμοποιήσετε την προσαρμοσμένη ενότητα HTTP.

Όταν χρησιμοποιείτε μια σύγχρονη μονάδα HTTP, το νήμα δεν θα κυκλοφορήσει έως ότου ολοκληρωθεί η επεξεργασία του αιτήματος. Αυτό μπορεί να γίνει ένα σημαντικό εμπόδιο απόδοσης όταν η προσαρμοσμένη λειτουργική μονάδα HTTP πρέπει να εκτελεί μακροχρόνιες δεσμευμένες λειτουργίες I / O. Για να το λύσετε αυτό, μπορείτε να επωφεληθείτε από τον ασύγχρονο προγραμματισμό για να εφαρμόσετε μια ασύγχρονη μονάδα HTTP επίσης. Αυτό θα εξασφάλιζε ότι η απόδοση της εφαρμογής σας δεν θα υποβαθμιστεί όταν η μονάδα HTTP σας χρειάζεται να κάνει πολλή επεξεργασία. Ο ασύγχρονος προγραμματισμός βοηθά στην καλύτερη χρήση των διαθέσιμων πόρων.

Για να εφαρμόσετε ασύγχρονο στην προσαρμοσμένη μονάδα HTTP, θα θέλατε να αξιοποιήσετε την κλάση EventHandlerTaskAsyncHelper που διατίθεται ως μέρος του .NET Framework 4.5 Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να εκμεταλλευτείτε αυτήν την τάξη για να εγγραφείτε σε συμβάντα με τη μέθοδο Init της προσαρμοσμένης ενότητας HTTP. Σημειώστε ότι η μέθοδος LogRequest πρέπει να επιστρέφει μια παρουσία τύπου Task.

public void Init (HttpΕφαρμογή περιβάλλοντος)

       {

EventHandlerTaskAsyncHelper asyncHelperObject = νέο EventHandlerTaskAsyncHelper (LogRequest);

πλαίσιο.AddOnPostAuthorizeRequestAsync (asyncHelperObject.BeginEventHandler, asyncHelperObject.EndEventHandler);

       }

Ακολουθεί η πλήρης λίστα κωδικών της ασύγχρονης έκδοσης της προσαρμοσμένης ενότητας HTTP.

δημόσια τάξη CustomModule: IHttpModule

   {

public void Init (HttpΕφαρμογή περιβάλλοντος)

       {

EventHandlerTaskAsyncHelper asyncHelperObject = νέο EventHandlerTaskAsyncHelper (LogRequest);

πλαίσιο.AddOnPostAuthorizeRequestAsync (asyncHelperObject.BeginEventHandler, asyncHelperObject.EndEventHandler);

       }

private async Task LogRequest (αποστολέας αντικειμένων, EventArgs e)

       {

HttpContext konteks = ((HttpApplication) αποστολέας). Context;

string filePath = @ "D: \ Log.txt";

χρησιμοποιώντας (StreamWriter streamWriter = νέο StreamWriter (filePath, true))

           {

περιμένετε streamWriter.WriteLineAsync (konteks.Request.Path);

           }

       }

   }

Πώς να κάνετε περισσότερα στα ASP.NET και ASP.NET Core:

  • Τρόπος χρήσης της προσωρινής αποθήκευσης στη μνήμη στο ASP.NET Core
  • Πώς να χειριστείτε σφάλματα στο ASP.NET Web API
  • Τρόπος μετάδοσης πολλαπλών παραμέτρων σε μεθόδους ελεγκτή API Ιστού
  • Τρόπος καταγραφής των μεταδεδομένων αιτήματος και απόκρισης στο ASP.NET Web API
  • Πώς να εργαστείτε με HttpModules στο ASP.NET
  • Προηγμένη έκδοση στο ASP.NET Core Web API
  • Πώς να χρησιμοποιήσετε την ένεση εξάρτησης στο ASP.NET Core
  • Πώς να εργαστείτε με συνεδρίες στο ASP.NET
  • Πώς να εργαστείτε με HTTPHandlers στο ASP.NET
  • Πώς να χρησιμοποιήσετε το IHostedService στο ASP.NET Core
  • Πώς να καταναλώσετε μια υπηρεσία WCF SOAP στο ASP.NET Core
  • Πώς να βελτιώσετε την απόδοση των εφαρμογών ASP.NET Core
  • Πώς να καταναλώσετε ένα ASP.NET Core Web API χρησιμοποιώντας το RestSharp
  • Πώς να εργαστείτε με τη σύνδεση στο ASP.NET Core
  • Πώς να χρησιμοποιήσετε το MediatR στο ASP.NET Core
  • Τρόπος εργασίας με την κατάσταση συνεδρίας στον ASP.NET Core
  • Πώς να χρησιμοποιήσετε το Nancy στο ASP.NET Core
  • Κατανοήστε τη δέσμευση παραμέτρων στο ASP.NET Web API
  • Πώς να ανεβάσετε αρχεία στο ASP.NET Core MVC
  • Τρόπος εφαρμογής του παγκόσμιου χειρισμού εξαιρέσεων στο ASP.NET Core Web API
  • Πώς να εφαρμόσετε ελέγχους υγείας στο ASP.NET Core
  • Βέλτιστες πρακτικές στην προσωρινή αποθήκευση στο ASP.NET
  • Πώς να χρησιμοποιήσετε τα μηνύματα Apache Kafka στο .NET
  • Πώς να ενεργοποιήσετε το CORS στο Web API σας
  • Πότε να χρησιμοποιήσετε το WebClient εναντίον HttpClient εναντίον HttpWebRequest
  • Πώς να εργαστείτε με το Redis Cache στο .NET
  • Πότε να χρησιμοποιήσετε το Task.WaitAll εναντίον Task.WhenAll στο .NET