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

Πώς να εργαστείτε με 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 Web. Ο πιο συνηθισμένος χειριστής είναι ένας χειριστής σελίδας ASP.Net. που επεξεργάζεται αρχεία .aspx. Όταν οι χρήστες ζητούν ένα αρχείο .aspx, το αίτημα υποβάλλεται σε επεξεργασία από τη σελίδα μέσω του χειριστή σελίδας. "

Δημιουργία προσαρμοσμένου HTTPhandler

Σε αυτήν την ενότητα θα διερευνήσουμε πώς μπορούμε να δημιουργήσουμε ένα προσαρμοσμένο HTTPhandler στο ASP.Net. Για να δημιουργήσετε ένα προσαρμοσμένο HTTPhandler, δημιουργήστε μια κλάση που εφαρμόζει το IHTTPhandler, όπως φαίνεται στο παρακάτω απόσπασμα κώδικα.

namespace CustomHTTPhandler

{

δημόσια τάξη CustomHTTPhandler: IHTTPhandler

   {

δημόσια bool IsReusable

       {

λάβετε {return false; }

       }

public void ProcessRequest (περιβάλλον HttpContext)

       {

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

       }

   }

}

Λάβετε υπόψη ότι ο προσαρμοσμένος χειριστής HTTP θα πρέπει να έχει μια ιδιότητα που ονομάζεται IsReusable και μια μέθοδο που ονομάζεται ProcessRequest. Ενώ το πρώτο χρησιμοποιείται για να καθορίσει εάν ο χειριστής μπορεί να επαναχρησιμοποιηθεί, το δεύτερο είναι μια μέθοδος που κάνει την πραγματική επεξεργασία για εσάς. Στην ουσία, κάθε προσαρμοσμένο HTTPHandler θα πρέπει να εφαρμόσει τη διασύνδεση IHttphandler και να ορίσει αυτά τα δύο μέλη.

Εγγραφή του χειριστή σας

Οι πληροφορίες αντιστοίχισης για το HTTPhandlers είναι διαθέσιμες στα αρχεία διαμόρφωσης. Δείτε πώς μπορεί να μοιάζει μια ενότητα του αρχείου machine.config.

Τώρα, θα πρέπει επίσης να ενημερώσετε τον χρόνο εκτέλεσης πότε πρέπει να γίνει επίκληση του προσαρμοσμένου HTTPhandler. Πού πρέπει να το καθορίσετε; Λοιπόν, μπορείτε να καθορίσετε τέτοιες λεπτομέρειες στο αρχείο web.config. Μπορείτε να προσθέσετε και να καταργήσετε HTTPhandlers χρησιμοποιώντας την ενότητα διαμόρφωσης στο αρχείο διαμόρφωσης των εφαρμογών σας. Δείτε πώς μπορείτε να καταχωρίσετε τον χειριστή σας στο αρχείο web.config της εφαρμογής.

  

Τι κάναμε λοιπόν εδώ; Μόλις καταγράψαμε τον διαχειριστή μας και καθορίσαμε ότι εάν φτάσει κάποιο αίτημα για επέκταση του .idgaspx, αυτό το αίτημα θα πρέπει να δρομολογηθεί στον προσαρμοσμένο χειριστή Http που ονομάζεται CustomHTTPhandler.

Σημειώστε ότι σε αντίθεση με τις ιστοσελίδες .aspx, οι HTTPhandlers δεν έχουν οπτικά στοιχεία. Μπορείτε να δημιουργήσετε το HTTPhandlers σε μια προσαρμοσμένη βιβλιοθήκη και, στη συνέχεια, να τα επαναχρησιμοποιήσετε όπως και όταν χρειάζονται.

Ασύγχρονοι HTTPHandlers

Οι νεότερες εκδόσεις του ASP.Net παρέχουν υποστήριξη για ασύγχρονους χειριστές Http. Μπορείτε να επωφεληθείτε από το async / waiting και το TPL για να δημιουργήσετε ασύγχρονα HTTPhandlers στο ASP.Net. Για να δημιουργήσετε ένα προσαρμοσμένο ασύγχρονο HTTPhandler, θα πρέπει να κληρονομήσετε την κλάση HttpTaskAsyncHandler. Η αφηρημένη κλάση HttpTaskAsyncHandler εφαρμόζει με τη σειρά της τις διεπαφές IHttpAsyncHandler και IHTTPhandler. Το ακόλουθο απόσπασμα κώδικα απεικονίζει πώς μοιάζει το προσαρμοσμένο ασύγχρονο HTTPhandler με την πρώτη ματιά.

δημόσια τάξη CustomHTTPhandler: HttpTaskAsyncHandler

   {

δημόσια παράκαμψη Task ProcessRequestAsync (HttpContext konteks)

       {

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

       }

   }