Kā jūs izmantojat filtrus C# pipeline'os? Vai varat sniegt piemērus to izmantošanai?
sobes.tech AI
Atbilde no AI
C# konveijeru filtri tiek izmantoti, lai iejauktos un pārņemtu dažādos pieprasījuma apstrādes vai uzdevuma izpildes posmos. ASP.NET Core tīmekļa lietojumprogrammās tie ļauj pievienot loģiku pirms, pēc vai laikā, kad tiek izpildīti kontroliera darbības metodes, kā arī citos pieprasījuma apstrādes līmeņos.
ASP.NET Core filtru piemēri:
-
Autentifikācija un autorizācija (Authentication/Authorization Filters): Nosaka, vai lietotājs ir tiesīgs veikt noteiktu darbību.
// Autorize atribūta piemērs [Authorize] public class HomeController : Controller { public IActionResult Index() { return View(); } } -
Resursu filtri (Resource Filters): Pirmie tiek izpildīti pēc autorizācijas filtri. Tie var veikt kešatmiņas vai pārtraukt konveijeru.
// Resursu filtra piemērs kešatmiņai public class CacheResourceFilter : IResourceFilter { public void OnResourceExecuting(ResourceExecutingContext context) { // Loģika pirms darbības izpildes } public void OnResourceExecuted(ResourceExecutedContext context) { // Loģika pēc darbības izpildes, bet pirms atbildes ierakstīšanas } } -
Darbību filtri (Action Filters): Tiek izpildīti pirms un pēc kontroliera darbības metodes izpildes. Tie ir piemēroti datu validācijai, žurnālu veidošanai vai rezultātu modifikācijai.
// Darbības filtra piemērs žurnālam public class LogActionFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { // Loģika pirms darbības Console.WriteLine($"Executing action: {context.ActionDescriptor.DisplayName}"); } public void OnActionExecuted(ActionExecutedContext context) { // Loģika pēc darbības Console.WriteLine($"Executed action: {context.ActionDescriptor.DisplayName}"); } } // Darbības filtra piemērošana kontroliera metodē [LogActionFilter] public IActionResult About() { return View(); } -
Kļūdu filtri (Exception Filters): Apstrādā neapstrādātas kļūdas, kas rodas darbības metodes vai citu filtru laikā.
// Kļūdu apstrādes filtra piemērs public class CustomExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { // Kļūdas apstrādes loģika context.Result = new ContentResult() { Content = "An error occurred.", StatusCode = 500 }; context.ExceptionHandled = true; // Norāda, ka kļūda ir apstrādāta } } // Kļūdu filtra piemērošana kontrolierim [CustomExceptionFilter] public class ErrorController : Controller { public IActionResult Index() { throw new Exception("Something went wrong!"); } } -
Rezultātu filtri (Result Filters): Tiek izpildīti pirms un pēc darbības rezultāta metodes izpildes (piemēram, pirms vai pēc ViewResult, JsonResult utt.).
// Rezultāta modifikācijas filtra piemērs public class CustomResultFilter : IResultFilter { public void OnResultExecuting(ResultExecutingContext context) { // Loģika pirms rezultāta metodes Console.WriteLine($"Executing result type: {context.Result.GetType().Name}"); } public void OnResultExecuted(ResultExecutedContext context) { // Loģika pēc rezultāta metodes Console.WriteLine($"Executed result type: {context.Result.GetType().Name}"); } }
Filtri var tikt piemēroti globāli (visām pieprasījumiem), kontroliera līmenī vai konkrētas darbības metodes līmenī. To izpildes secība ir atkarīga no to tipa.