Τρόπος δημιουργίας προσαρμοσμένων σφαλμάτων αναφοράς σελίδες του ASP.NET με χρήση της Visual C# .NET

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 306355 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Αυτό το άρθρο περιγράφει τον τρόπο χρήσης του κώδικα Visual C# .NET για την παγίδευση και να απαντήσετε σε σφάλματα όταν παρουσιάζονται στο ASP.NET. ASP.NET βελτιώθηκε το σφάλμα χειρισμού επιλογές από παραδοσιακές Microsoft Active Server Pages (ASP). Στο ASP.NET, μπορείτε να χειριστείτε σφάλματα σε πολλά διαφορετικά επίπεδα στις εφαρμογές σας.

Νέες δυνατότητες στο ASP.NET

ASP.NET προσφέρει πολλές πρόοδοι πώς να χειρίζονται και να απαντήσετε σε σφάλματα. Στις παραδοσιακές ASP, μπορείτε να χειριστείτε σφάλματα με "Στο σφάλμα συνέχιση Επόμενο" (ή μπλοκ try-catch σε JScript). Εναλλακτικά, εάν εκτελείτε Microsoft Internet Information Services (IIS) 5.0, θα μπορείτε να χρησιμοποιήσετε το αντικείμενο ASPError για να δημιουργήσετε μια προσαρμοσμένη αναφορά σελίδα σφάλματος. Ωστόσο, αυτές οι προσεγγίσεις έχουν τους περιορισμούς.

ASP.NET παρέχει πολλά επίπεδα, με την οποία μπορείτε να χειριστείτε και να απαντήσετε σε σφάλματα που ενδέχεται να προκύψουν κατά την εκτέλεση μιας εφαρμογής του ASP.NET. ASP.NET παρέχει τρεις βασικές μέθοδοι που σας επιτρέπουν να παγιδεύσει και να απαντήσετε σε σφάλματα όταν προκύπτουν: Page_Error, Application_Errorκαι το αρχείο ρύθμισης παραμέτρων εφαρμογής (Web.config).

Αυτό το άρθρο παρουσιάζει πώς μπορείτε να χρησιμοποιήσετε αυτές τις νέες δυνατότητες της εφαρμογής ASP.NET. Αν και αυτό το άρθρο περιγράφει τον τρόπο παροχής προσαρμοσμένες σελίδες σφαλμάτων και γενικό σφάλμα αναφοράς όπως σχετίζεται άμεσα με το ASP.NET, αυτό το άρθρο δεν περιγράφει άλλες σφάλμα κατά το χειρισμό προσεγγίσεις όπως το μπλοκ try-catch-τέλος και το σύστημα εξαίρεση χρόνου εκτέλεσης κοινής γλώσσας (CLR).

Τρόπος χρήσης της μεθόδου Page_Error

Το πρόγραμμα χειρισμού συμβάντων Page_Error παρέχει έναν τρόπο για να παγιδεύει τα σφάλματα που προκύπτουν σε επίπεδο σελίδας. Μπορείτε απλώς να εμφανίσετε πληροφορίες σφάλματος (όπως κάνει το δείγμα κώδικα για να ακολουθήσετε), ή μπορείτε να καταγράψει το συμβάν ή να πραγματοποιήσετε κάποια άλλη ενέργεια.

Σημείωση Αυτό το παράδειγμα εμφανίζει λεπτομερών πληροφοριών σφάλματος στο πρόγραμμα περιήγησης μόνο για σκοπούς επίδειξης. Θέλετε να είστε προσεκτικοί κατά την εμφάνιση λεπτομερείς πληροφορίες για τον τελικό χρήστη της εφαρμογής, ιδίως όταν η εφαρμογή εκτελείται στο Internet. Είναι μια πιο κατάλληλη ενέργεια για να εμφανίσετε ένα μήνυμα στο χρήστη, ειδοποιώντας ότι Παρουσιάστηκε σφάλμα και, στη συνέχεια, συνδεόμενοι τις λεπτομέρειες του συγκεκριμένου σφάλματος στο αρχείο καταγραφής συμβάντων.

Αυτό το παράδειγμα παρουσιάζει μια εξαίρεση null, η οποία επιβάλλει ένα σφάλμα στο πρόγραμμα χειρισμού συμβάντων Page_Load . Ακολουθήστε αυτά τα βήματα για τη δημιουργία της αρχικής σελίδας που θα αποδεικνύουν τη χρήση του προγράμματος χειρισμού συμβάντων Page_Error .
  1. Ακολουθήστε τα παρακάτω βήματα για να προσθέσετε ένα νέο αρχείο με όνομα PageEvent.aspxto το έργο σας:
    1. Ανοίξτε το Microsoft Visual Studio .NET.
    2. Στην Εξερεύνηση των λύσεων, κάντε δεξιό κλικ στον κόμβο του έργου, στην Προσθήκηκαι, στη συνέχεια, κάντε κλικ στο κουμπί Προσθήκη φόρμας Web.
    3. Στο πλαίσιο κειμένου " όνομα ", πληκτρολογήστε PageEvent.aspx, και στη συνέχεια κάντε κλικ στο κουμπί Άνοιγμα.
  2. Προσθέστε τον ακόλουθο κώδικα στο PageEvent.aspx:
    <script language=C# runat="server">
    void Page_Load(object sender, System.EventArgs e)
    {
    	throw(new ArgumentNullException());
    }
    
    public void Page_Error(object sender,EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"<b>Error Caught in Page_Error event</b><hr><br>" + 
    			"<br><b>Error in: </b>" + Request.Url.ToString() +
    			"<br><b>Error Message: </b>" + objErr.Message.ToString()+
    			"<br><b>Stack Trace:</b><br>" + 
    	                  objErr.StackTrace.ToString();
    	Response.Write(err.ToString());
    	Server.ClearError();
    }
    </script> 
    					

    Σημείωση Σε αυτό το δείγμα κώδικα, το χαρακτηριστικό AutoEventWireup δεν ρητά ορίζεται. Εάν δεν κάνετε assigna τιμή για το χαρακτηριστικό AutoEventWireup , χρησιμοποιείται η προεπιλεγμένη τιμή true . Εάν χρησιμοποιείτε το Visual Studio .NET για την ανάπτυξη yourapplications, τον κωδικό του προτύπου φόρμας Web ορίζει ρητά την τιμή του χαρακτηριστικού AutoEventWireup στην τιμή false. Υπάρχει μια σημαντική διαφορά μεταξύ τις χρήσεις προεπιλεγμένη τιμή thatASP.NET και η προεπιλεγμένη τιμή που το Visual Studio .NET codeassigns πρότυπο σε αυτό το χαρακτηριστικό. Εάν η τιμή του χαρακτηριστικού AutoEventWireup έχει οριστεί σε false, τα προγράμματα χειρισμού συμβάντων που δηλώνονται στο το.Notfire χωρίς σελίδα ASPX. Αυτό μπορεί να προκαλέσει σύγχυση, αν δεν γνωρίζετε σχετικά με το thisfunctionality.
  3. Από το μενού " αρχείο ", κάντε κλικ στο κουμπί " Αποθήκευση PageEvent.aspx".
  4. Κάντε δεξιό κλικ στη σελίδα και, στη συνέχεια, κάντε κλικ στην εντολή Προβολή σε πρόγραμμα περιήγησης για την εκτέλεση της σελίδας. Σημειώστε ότι το σφάλμα εντοπίζεται και reportedaccording προς τις προδιαγραφές του κώδικα.
Σημείωση Ενδέχεται να παρατηρήσετε ότι ο κώδικας εκτελεί μια κλήση για να Server.ClearError. Αυτό αποτρέπει το σφάλμα να συνεχίσει στο πρόγραμμα χειρισμού συμβάντων Application_Error .

Επιπλέον, θα πρέπει να λάβετε επίσης υπόψη του το χαρακτηριστικό Inherits στην οδηγία @ Page . Εάν έχει οριστεί Inherits , πρέπει να φτιάξετε το έργο πριν μπορέσετε να περιηγηθείτε στη σελίδα. Εάν δεν δημιουργήσετε πρώτα το έργο, λαμβάνετε το ακόλουθο μήνυμα λάθους:
'Project.PageEvent' δεν είναι έγκυρος τύπος

Τρόπος χρήσης της μεθόδου Application_Error

Παρόμοια με το πρόγραμμα χειρισμού συμβάντων Page_Error , μπορείτε να χρησιμοποιήσετε το πρόγραμμα χειρισμού συμβάντων Application_Error για να παγιδεύει τα σφάλματα που παρουσιάζονται στην εφαρμογή σας. Λόγω του συμβάντος εμβέλεια όλη την εφαρμογή, μπορείτε να σύνδεση πληροφοριών σφάλματος εφαρμογής ή να χειρίζονται άλλα σφάλματα επιπέδου εφαρμογής που ενδέχεται να προκύψουν.

Το δείγμα πρέπει να ακολουθήσετε είναι με βάση το προηγούμενο δείγμα κώδικα Page_Error και θα ενεργοποιηθεί εάν το σφάλμα στο Page_Load δεν ήταν παγιδευτεί στο πρόγραμμα χειρισμού συμβάντων Page_Error . Το πρόγραμμα χειρισμού συμβάντων Application_Error καθορίζεται στο αρχείο Global.asax της εφαρμογής σας. Για λόγους ευκολίας, τα βήματα σε αυτήν την ενότητα, δημιουργήστε μια νέα σελίδα στην οποία θέλετε να δημιουργήσει το εξαίρεση, παγιδεύει το σφάλμα στο πρόγραμμα χειρισμού συμβάντων Application_Error από το αρχείο Global.asax και το σφάλμα εγγραφής στο αρχείο καταγραφής συμβάντων. Τα παρακάτω βήματα δείχνουν πώς μπορείτε να χρησιμοποιήσετε τη μέθοδο Application_Error :
  1. Προσθέστε ένα νέο αρχείο με το όνομα AppEvent.aspx yourproject.
  2. Προσθέστε τον ακόλουθο κώδικα στο AppEvent.aspx:
    <script language=C# runat="server">
    	void Page_Load(object sender, System.EventArgs e)
    	{
    		throw(new ArgumentNullException());
    	}
    </script>
    					

    Σημείωση Οι πληροφορίες που αναφέρονται στην ενότητα "Page_Error" για το χαρακτηριστικό AutoEventWireup ισχύει επίσης για το δείγμα κώδικα σε αυτό το βήμα. Ανατρέξτε στην ενότητα theinformation στην ενότητα "Page_Error" για περισσότερες λεπτομέρειες.
  3. Από το μενού " αρχείο ", κάντε κλικ στο κουμπί " Αποθήκευση AppEvent.aspx".
  4. Προσθέστε το στοιχείο χειρισμού συμβάντος Application_Error στο αρχείο Global.asax για να εντοπίσετε το σφάλμα που youthrow στο πρόγραμμα χειρισμού συμβάντων Page_Load της σελίδας AppEvent.aspx. Σημειώστε ότι πρέπει να addanother με την πρόταση για το χώρο ονομάτων System.Diagnostics να Global.asax για να χρησιμοποιήσετε το αρχείο καταγραφής συμβάντων.

    Προσθέστε κώδικα thefollowing στο αρχείο Global.asax:
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString()+ 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	Server.ClearError();
    	//additional actions...
    } 
    					
  5. Αποθηκεύστε το αρχείο Global.asax.
  6. Στο Visual Studio .NET, στο μενού " Δημιουργία ", κάντε κλικ στο κουμπί Δημιουργία.
  7. Κάντε δεξιό κλικ στη σελίδα και, στη συνέχεια, κάντε κλικ στην εντολή Προβολή σε πρόγραμμα περιήγησης. Σε αυτήν την περίπτωση, η σελίδα θα είναι κενή, ωστόσο, θα πρέπει να noticethat έχει προστεθεί μια νέα καταχώρηση στο αρχείο καταγραφής συμβάντων. Αυτό το δείγμα δημιουργεί μια καταχώρηση στο αρχείο καταγραφής εφαρμογής, ο οποίος είναι προσβάσιμος από το πρόγραμμα προβολής συμβάντων. Μετά από σφάλμα loggingthe που θέλετε να ανακατευθύνετε το χρήστη σε άλλη περισσότερες σελίδα χρήστη-friendlyerror ή να εκτελέσετε ορισμένες πρόσθετες ενέργειες, εάν είναι απαραίτητο.

Τρόπος χρήσης του αρχείου Web.config

Εάν δεν καλέσετε Server.ClearError ή παγίδευσης το σφάλμα με το Page_Error ή Application_Error το πρόγραμμα χειρισμού συμβάντων, το σφάλμα γίνεται με βάση τις ρυθμίσεις στην ενότητα <customErrors>του αρχείου Web.config. Στην ενότητα " <customErrors>", μπορείτε να καθορίσετε μια σελίδα ανακατεύθυνσης ως μια προεπιλεγμένη σελίδα σφάλματος (defaultRedirect) ή να καθορίσετε σε μια συγκεκριμένη σελίδα, με βάση τον κωδικό σφάλματος HTTP που ενεργοποιείται. Μπορείτε να χρησιμοποιήσετε αυτήν τη μέθοδο για να προσαρμόσετε το μήνυμα λάθους που λαμβάνει ο χρήστης.

Εάν παρουσιαστεί σφάλμα, που δεν είναι παγιδευμένα σε οποιοδήποτε από τα προηγούμενα επίπεδα στην εφαρμογή σας, εμφανίζεται η προσαρμοσμένη σελίδα. Αυτή η ενότητα παρουσιάζει πώς μπορείτε να τροποποιήσετε το αρχείο Global.asax, έτσι ώστε να μην καλείται ποτέ Server.ClearError . Ως αποτέλεσμα, το σφάλμα γίνεται στο αρχείο Web.config το τελευταίο σημείο για να εντοπίσετε το σφάλμα. </customErrors></customErrors>
  1. Ανοίξτε το αρχείο Global.asax από το previousexample.
  2. Σχόλιο από τη γραμμή Server.ClearError για να βεβαιωθείτε ότι το σφάλμα επιφανειών κατά την Web.configfile.
  3. Αποθηκεύστε τις αλλαγές στο Global.asax. Ο κώδικάς σας θα πρέπει να nowappear που είναι παρόμοιο με το ακόλουθο:
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString() + 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	//Server.ClearError();
    	//additional actions...
    } 
    					
  4. Προσθέστε τον ακόλουθο κώδικα για να το <customErrors>sectionto ανακατευθύνει το χρήστη σε μια προσαρμοσμένη σελίδα:<b00> </b00> </customErrors>
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
    </customErrors>
    						
    Σημείωση Πρέπει να τροποποιήσετε τη διαδρομή του αρχείου στο χαρακτηριστικό defaultRedirect ώστε να παραπέμπει τα σχετικά ονόματα andapplication διακομιστή Web.
  5. Επειδή τα σφάλματα τα οποία είναι παγιδευμένα σε αυτό το επίπεδο είναι sentto μια προεπιλεγμένη σελίδα σφάλματος, πρέπει να δημιουργήσετε μια σελίδα σφάλματος με το όνομα ErrorStatus.htm.Keep υπόψη που χρησιμοποιείτε αυτήν τη μέθοδο για να ελέγξετε τι θα υποβάλλεται στο theuser, έτσι ώστε το παράδειγμα αυτό χρησιμοποιεί μια σελίδα .htm για τη σελίδα σφάλματος. Προσθέστε το followingcode ErrorStatus.htm:
    <HTML>
    <HEAD>
    <TITLE></TITLE>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0">
    </HEAD>
    <BODY>
         <b>Custom Error page!</b>
         <br>
         You have been redirected here from the <customErrors> section of the 
         Web.config file.
    </BODY>
    </HTML>
    					
  6. Για να δοκιμάσετε τον κώδικα, αποθηκεύστε τα αρχεία, δημιουργήστε το έργο, andthen προβολή AppEvent.aspx στο πρόγραμμα περιήγησης. Σημειώστε ότι όταν παρουσιαστεί το σφάλμα, θα μεταφερθείτε στη σελίδα ErrorStatus.htm.
Αν και μπορείτε να αναφερθείτε σε μια προεπιλεγμένη σελίδα σφάλματος στην τιμή του χαρακτηριστικού defaultRedirect στην ενότητα <customErrors>, μπορείτε επίσης να καθορίσετε μια συγκεκριμένη σελίδα, για να ανακατευθύνετε με βάση τον κωδικό σφάλματος HTTP που ενεργοποιείται. Αυτή η επιλογή επιτρέπει το θυγατρικό στοιχείο <error>. Για παράδειγμα:<b00> </b00> </error> </customErrors>
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
	<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
				
Σημείωση Η σελίδα που καθορίζεται στο defaultRedirect της ενότητας <customErrors>είναι ένα αρχείο .htm. I

Σημειώστε ότι η ενότητα <customErrors>περιλαμβάνει ένα χαρακτηριστικό κατάσταση λειτουργίας που έχει οριστεί στο. Το χαρακτηριστικό κατάστασης χρησιμοποιείται για τον έλεγχο του πώς παρουσιάζεται το σφάλμα ανακατεύθυνσης. Για παράδειγμα, εάν σχεδιάζετε την εφαρμογή, πιθανότατα θέλετε να δείτε τα πραγματικά μηνύματα λάθους ASP.NET και δεν θέλετε να γίνει ανακατεύθυνση σε σελίδα σφάλματος πιο φιλικό προς το χρήστη. Το χαρακτηριστικό κατάστασης περιλαμβάνει τις ακόλουθες ρυθμίσεις: </customErrors></customErrors>
  • Σε: ανεπίλυτες εξαιρέσεις ανακατευθύνετε το χρήστη στη σελίδα καθορισμένο defaultRedirect . Αυτή η λειτουργία χρησιμοποιείται κυρίως στην παραγωγή.
  • Απενεργοποίηση: οι χρήστες λαμβάνουν τις πληροφορίες εξαίρεσης και είναι δεν redirectedto τη σελίδα defaultRedirect . Αυτή η λειτουργία χρησιμοποιείται κυρίως στην ανάπτυξη.
  • RemoteOnly: μόνο οι χρήστες που έχουν πρόσβαση στην τοποθεσία, στον τοπικό υπολογιστή (με usinglocalhost) λαμβάνουν τις πληροφορίες εξαίρεσης. Όλοι οι άλλοι χρήστες ανακατευθύνονται στη σελίδα defaultRedirect . Αυτή η λειτουργία χρησιμοποιείται κυρίως για τον εντοπισμό σφαλμάτων.

Αντιμετώπιση προβλημάτων

Με την προεπιλεγμένη εγκατάσταση σε Microsoft Windows 2000 και στα Microsoft Windows XP, το ASP.NET εκτελεί κώδικα εφαρμογής Web σε μια διαδικασία εργασίας. Τοπικό λογαριασμό χωρίς δικαιώματα που ονομάζεται το λογαριασμό ASPNET προεπιλογή την ταυτότητα αυτής της διαδικασίας. Σε εκδόσεις beta του ASP.NET, την ταυτότητα της διεργασίας δημιουργήθηκε από το σύστημα, ένα ισχυρό διαχείρισης λογαριασμό με πολλά δικαιώματα στον υπολογιστή.

Με την προεπιλεγμένη εγκατάσταση σε Windows Server 2003 (IIS 6), το ASP.NET εκτελεί κώδικα εφαρμογής Web σε μια διαδικασία εργασίας. Η ταυτότητα της διαδικασίας προεπιλογή έναν περιορισμένο λογαριασμό που ονομάζεται NetworkService.

Για περισσότερες πληροφορίες σχετικά με αυτήν την αλλαγή και πώς αυτό μπορεί να επηρεάσει εκτελεί τον κωδικό σε αυτό το άρθρο, καθώς και άλλες άλλο κώδικα που μπορεί να χρειαστείτε επιπλέον δικαιώματα, επισκεφθείτε τις ακόλουθες τοποθεσίες Web:
Αλλαγή ασφαλείας στην έκδοση 1 για το Microsoft .NET Framework
http://msdn2.Microsoft.com/en-us/library/ms994923.aspx

Αναφορές

Για περισσότερες πληροφορίες, επισκεφθείτε τις ακόλουθες τοποθεσίες της Microsoft στο Web:
Εξαίρεση διαχείρισης στο .NET

Η μέθοδος HttpServerUtility.ClearError

Κέντρο ανάπτυξης .NET MSDN

Αρχική σελίδα του Microsoft .NET

Ιδιότητες

Αναγν. άρθρου: 306355 - Τελευταία αναθεώρηση: Τρίτη, 29 Οκτωβρίου 2013 - Αναθεώρηση: 5.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
Λέξεις-κλειδιά: 
kbconfig kbhowtomaster kbweb kbmt KB306355 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο έχει μεταφραστεί χρησιμοποιώντας λογισμικό μηχανικής μετάφρασης της Microsoft και μπορείτε να το διορθώσετε χρησιμοποιώντας την τεχνολογία Community Translation Framework (CTF) (Πλαίσιο μετάφρασης κοινότητας). Η Microsoft παρέχει μηχανική μετάφραση, επεξεργασία μετά τη μηχανική μετάφραση από την κοινότητα και άρθρα μεταφρασμένα από επαγγελματίες προκειμένου να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής βάσης σε πολλές γλώσσες. Τα άρθρα μηχανικής μετάφρασης και αυτά που επεξεργάζονται ύστερα από μηχανική μετάφραση ενδέχεται να περιέχουν σφάλματα στο λεξιλόγιο, στη σύνταξη ή/και στη γραμματική. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες μας. Για περισσότερες πληροφορίες σχετικά με το CTF, μεταβείτε στην τοποθεσία http://support.microsoft.com/gp/machine-translation-corrections/el.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη: 306355

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com