NOTE: Apart from
(and even then it's questionable, I'm Scottish). These are machine translated in languages I don't read. If they're terrible please contact me.
You can see how this translation was done in this article.
Saturday, 17 August 2024
//Less than a minute
Σε κάθε web εφαρμογή είναι σημαντικό να χειριστεί τα λάθη με χάρη. Αυτό ισχύει ιδιαίτερα σε ένα περιβάλλον παραγωγής όπου θέλετε να παρέχετε μια καλή εμπειρία χρήστη και να μην εκθέσετε καμία ευαίσθητη πληροφορία. Σε αυτό το άρθρο θα δούμε πώς να χειριστεί τα λάθη σε μια εφαρμογή ASP.NET πυρήνα.
Όταν μια μη χειριζόμενη εξαίρεση εμφανίζεται σε μια εφαρμογή ASP.NET Core, η προεπιλεγμένη συμπεριφορά είναι να επιστρέψει μια γενική σελίδα σφάλματος με κωδικό κατάστασης 500. Αυτό δεν είναι ιδανικό για διάφορους λόγους:
Στο ASP.NET Core υπάρχει ένα τακτοποιημένο feature build στο οποίο μας επιτρέπει να χειριστούμε αυτά τα λάθη.
app.UseStatusCodePagesWithReExecute("/error/{0}");
Βάζουμε αυτό στο δικό μας Program.cs
Φάκελος νωρίς στον αγωγό. Αυτό θα πιάσει κάθε κωδικό κατάστασης που δεν είναι 200 και να ανακατευθύνονται στο /error
διαδρομή με τον κωδικό κατάστασης ως παράμετρο.
Ο ελεγκτής λάθους μας θα μοιάζει κάπως έτσι:
[Route("/error/{statusCode}")]
public IActionResult HandleError(int statusCode)
{
// Retrieve the original request information
var statusCodeReExecuteFeature = HttpContext.Features.Get<IStatusCodeReExecuteFeature>();
if (statusCodeReExecuteFeature != null)
{
// Access the original path and query string that caused the error
var originalPath = statusCodeReExecuteFeature.OriginalPath;
var originalQueryString = statusCodeReExecuteFeature.OriginalQueryString;
// Optionally log the original URL or pass it to the view
ViewData["OriginalUrl"] = $"{originalPath}{originalQueryString}";
}
// Handle specific status codes and return corresponding views
switch (statusCode)
{
case 404:
return View("NotFound");
case 500:
return View("ServerError");
default:
return View("Error");
}
}
Αυτός ο ελεγκτής θα χειριστεί το σφάλμα και θα επιστρέψει μια προσαρμοσμένη άποψη με βάση τον κωδικό κατάστασης. Μπορούμε επίσης να καταγράψουμε το αρχικό URL που προκάλεσε το σφάλμα και να το περάσουμε στην προβολή. Αν είχαμε μια κεντρική υπηρεσία καταγραφής / ανάλυσης θα μπορούσαμε να καταγράψουμε αυτό το σφάλμα σε αυτή την υπηρεσία.
Οι απόψεις μας είναι οι εξής:
<h1>404 - Page not found</h1>
<p>Sorry that Url doesn't look valid</p>
@section Scripts {
<script>
document.addEventListener('DOMContentLoaded', function () {
if (!window.hasTracked) {
umami.track('404', { page:'@ViewData["OriginalUrl"]'});
window.hasTracked = true;
}
});
</script>
}
Αρκετά απλό, σωστά; Μπορούμε επίσης να καταγράψουμε το σφάλμα σε μια υπηρεσία καταγραφής όπως το Application Insights ή Serilog. Με αυτόν τον τρόπο μπορούμε να παρακολουθούμε τα λάθη και να τα φτιάχνουμε πριν γίνουν πρόβλημα. Στην περίπτωσή μας το καταγράφουμε ως γεγονός στην υπηρεσία ανάλυσης Umami. Με αυτόν τον τρόπο μπορούμε να παρακολουθούμε πόσα 404 λάθη έχουμε και από πού προέρχονται.
Αυτό διατηρεί επίσης τη σελίδα σας σύμφωνα με την επιλεγμένη διάταξη και σχεδιασμό σας.
Αυτός είναι ένας απλός τρόπος για να χειριστείτε τα λάθη σε μια εφαρμογή ASP.NET Core. Παρέχει μια καλή εμπειρία χρήστη και μας επιτρέπει να παρακολουθούμε τα λάθη. Είναι μια καλή ιδέα να συνδεθείτε λάθη σε μια υπηρεσία καταγραφής, ώστε να μπορείτε να τα παρακολουθείτε και να τα διορθώσετε πριν γίνουν πρόβλημα.