Middle
Τι είναι το φίλτρο ενέργειας και ποιες λειτουργίες εκτελεί;
sobes.tech AI
Απάντηση από AI
Οι φίλτρα δράσης στο ASP.NET Core είναι ένας συγκεκριμένος τύπος φίλτρων που παρεμβαίνουν στην εκτέλεση της μεθόδου δράσης του ελεγκτή.
Βασικές λειτουργίες:
- Πριν από την εκτέλεση της δράσης: Εκτελούν κώδικα πριν καλεστεί η μέθοδος δράσης του ελεγκτή (
OnActionExecuting). - Μετά την εκτέλεση της δράσης: Εκτελούν κώδικα μετά την κλήση της μεθόδου δράσης, αλλά πριν διαμορφωθεί το αποτέλεσμα (
OnActionExecuted). - Τροποποίηση του πλαισίου: Μπορούν να τροποποιήσουν το πλαίσιο εκτέλεσης της δράσης (
ActionExecutingContext) ή το πλαίσιο μετά την εκτέλεση (ActionExecutedContext), π.χ., προσθέτοντας δεδομένα σταHttpContext.Items, αλλάζοντας τη δρομολόγηση ή ορίζοντας το αποτέλεσμα της δράσης. - Διαχείριση εξαιρέσεων: Δεν διαχειρίζονται άμεσα εξαιρέσεις, αλλά μπορούν να χρησιμοποιηθούν για να ορίσουν αποτέλεσμα σφάλματος αν προκύψει εξαίρεση στο στάδιο
OnActionExecuting.
Παραδείγματα χρήσης:
- Επικύρωση δεδομένων αιτήματος πριν από την κλήση της δράσης.
- Προσθήκη επικεφαλίδων ή τροποποίηση του σώματος της απάντησης.
- Καταγραφή πληροφοριών σχετικά με το αίτημα και την απάντηση.
- Cache αποτελεσμάτων δράσης.
- Εκτέλεση εξουσιοδότησης και πιστοποίησης (αν και για αυτό χρησιμοποιούνται εξειδικευμένα φίλτρα Authorization και Authentication).
Υλοποίηση: Δημιουργούνται κληρονομώντας από το ActionFilterAttribute ή υλοποιώντας τις διεπαφές IActionFilter (συγχρονισμένο) ή IAsyncActionFilter (ασύγχρονο).
// Παράδειγμα απλού συγχρονου φίλτρου δράσης
public class CustomActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
// Λογική πριν από την εκτέλεση της δράσης
Console.WriteLine("Πριν από την εκτέλεση της δράσης");
base.OnActionExecuting(context);
}
public override void OnActionExecuted(ActionExecutedContext context)
{
// Λογική μετά την εκτέλεση της δράσης
if (context.Exception == null && context.Result is ObjectResult objectResult)
{
// Τροποποίηση αποτελέσματος αν δεν υπάρχει εξαίρεση και το αποτέλεσμα είναι ObjectResult
Console.WriteLine($"Κωδικός κατάστασης αποτελέσματος δράσης: {objectResult.StatusCode}");
}
Console.WriteLine("Μετά την εκτέλεση της δράσης");
base.OnActionExecuted(context);
}
}
Εφαρμόζονται σε ελεγκτές ή συγκεκριμένες μεθόδους δράσης μέσω διακριτικών:
[CustomActionFilter] // Εφαρμογή σε ελεγκτή
public class HomeController : Controller
{
[HttpGet]
[CustomActionFilter] // Εφαρμογή σε μέθοδο δράσης
public IActionResult Index()
{
return Ok("Γειά από το Index!");
}
}