Wie wenden Sie Filter in Pipelines in C# an? Können Sie Beispiele für deren Verwendung geben?
sobes.tech KI
Antwort von AI
Filter in C#-Pipelines werden verwendet, um auf verschiedenen Stufen der Anfrageverarbeitung oder Aufgaben-Ausführung abzufangen und einzugreifen. In ASP.NET Core-Webanwendungen ermöglichen sie das Hinzufügen von Logik vor, nach oder während der Ausführung von Controller-Aktionsmethoden sowie auf anderen Ebenen der Anfrageverarbeitung.
Beispiele für die Verwendung von Filtern in ASP.NET Core:
-
Authentifizierungs- und Autorisierungsfilter: Bestimmen, ob ein Benutzer berechtigt ist, eine bestimmte Aktion auszuführen.
// Beispiel für das Authorize-Attribut [Authorize] public class HomeController : Controller { public IActionResult Index() { return View(); } } -
Ressourcen-Filter: Werden zuerst nach den Autorisierungsfiltern ausgeführt. Können Caching durchführen oder den Pipeline unterbrechen.
// Beispiel für einen Ressourcen-Filter für Caching public class CacheResourceFilter : IResourceFilter { public void OnResourceExecuting(ResourceExecutingContext context) { // Logik vor der Ausführung der Aktion } public void OnResourceExecuted(ResourceExecutedContext context) { // Logik nach der Ausführung der Aktion, aber vor der Antwort } } -
Aktions-Filter: Werden vor und nach der Ausführung der Controller-Aktionsmethode ausgeführt. Nützlich für Datenvalidierung, Logging oder Modifikation von Parametern und Ergebnissen.
// Beispiel für einen Aktions-Filter für Logging public class LogActionFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { // Logik vor der Ausführung der Aktion Console.WriteLine($"Ausführung der Aktion: {context.ActionDescriptor.DisplayName}"); } public void OnActionExecuted(ActionExecutedContext context) { // Logik nach der Ausführung der Aktion Console.WriteLine($"Ausgeführte Aktion: {context.ActionDescriptor.DisplayName}"); } } // Anwendung des Aktions-Filters auf eine Methode [LogActionFilter] public IActionResult About() { return View(); } -
Ausnahme-Filter: Behandeln unbehandelte Ausnahmen, die während der Ausführung der Aktionsmethode oder anderer Filter auftreten.
// Beispiel für einen Ausnahme-Filter zur Fehlerbehandlung public class CustomExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { // Logik zur Behandlung der Ausnahme context.Result = new ContentResult() { Content = "Ein Fehler ist aufgetreten.", StatusCode = 500 }; context.ExceptionHandled = true; // Gibt an, dass die Ausnahme behandelt wurde } } // Anwendung des Ausnahme-Filters auf einen Controller [CustomExceptionFilter] public class ErrorController : Controller { public IActionResult Index() { throw new Exception("Etwas ist schief gelaufen!"); } } -
Ergebnis-Filter: Werden vor und nach der Ausführung der Ergebnis-Methode ausgeführt (z.B. vor oder nach der Ausführung von ViewResult, JsonResult usw.).
// Beispiel für einen Ergebnis-Filter zur Modifikation des Ergebnisses public class CustomResultFilter : IResultFilter { public void OnResultExecuting(ResultExecutingContext context) { // Logik vor der Ausführung der Ergebnis-Methode Console.WriteLine($"Auszuführender Ergebnis-Typ: {context.Result.GetType().Name}"); } public void OnResultExecuted(ResultExecutedContext context) { // Logik nach der Ausführung der Ergebnis-Methode Console.WriteLine($"Ausgeführter Ergebnis-Typ: {context.Result.GetType().Name}"); } }
Filter können global (für alle Anfragen), auf Controller-Ebene oder auf Ebene einer bestimmten Aktionsmethode angewendet werden. Die Reihenfolge ihrer Ausführung im Pipeline wird durch ihren Typ bestimmt.