C#'та pipeline'дарда фильтрлерди кантип колдонуп жатасыз? Алардын колдонуу мисалдарын бере аласызбы?
sobes.tech AI
AIден жооп
C# конвейерлериндеги фильтрлер суранычтын ишке ашырылышынын ар кандай этаптарында кармоо жана кийлигишүү үчүн колдонулат. ASP.NET Core веб-кушымталарында алар контроллерлердин аракеттеринин методдорун ишке ашыруунун алдын, кийин жана учурунда логика кошууга мүмкүндүк берет, ошондой эле суранычтарды иштетүүнүн башка деңгээлдеринде.
ASP.NET Coreдеги фильтрлердин колдонуу мисалдары:
-
Аутентификация жана уруксат берүү (Authentication/Authorization Filters): Колдонуучу белгилүү бир аракетти аткарууга укуктуу экенин аныктайт.
// Authorize атрибутунун мисалы [Authorize] public class HomeController : Controller { public IActionResult Index() { return View(); } } -
Ресурстардын фильтрлери (Resource Filters): Уруксат берүү фильтрлеринен кийин биринчи болуп ишке ашат. Алар кэшке салуу же конвейерди үзүү үчүн колдонулушу мүмкүн.
// Кэшке салуу үчүн ресурс фильтринин мисалы public class CacheResourceFilter : IResourceFilter { public void OnResourceExecuting(ResourceExecutingContext context) { // Аракетке чейин логика } public void OnResourceExecuted(ResourceExecutedContext context) { // Аракетке кийин, жооп жазылгандан кийин логика } } -
Аракеттер фильтрлери (Action Filters): Контроллердин аракеттеринин методуна чейин жана кийин ишке ашат. Маалыматтарды текшерүү, журнал жүргүзүү же параметрлер жана натыйжаларды өзгөртүү үчүн ылайыктуу.
// Журнал жүргүзүү үчүн Action Filter мисалы public class LogActionFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { // Аракетке чейин логика Console.WriteLine($"Executing action: {context.ActionDescriptor.DisplayName}"); } public void OnActionExecuted(ActionExecutedContext context) { // Аракеттен кийин логика Console.WriteLine($"Executed action: {context.ActionDescriptor.DisplayName}"); } } // Action Filter колдонуу контроллердин методуна [LogActionFilter] public IActionResult About() { return View(); } -
Ката фильтрлери (Exception Filters): Ишке ашырылбаган ката-чыгымдарды иштетет, алар Аракеттин методу же башка фильтрлердин иштөө учурунда пайда болот.
// Ката өңдүү ката-чыгымдарды иштетүү үчүн Exception Filter мисалы public class CustomExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { // Ката өңдүү иштетүү логикасы context.Result = new ContentResult() { Content = "An error occurred.", StatusCode = 500 }; context.ExceptionHandled = true; // Ката иштетилди деп белгилөө } } // Контроллерге Exception Filter колдонуу [CustomExceptionFilter] public class ErrorController : Controller { public IActionResult Index() { throw new Exception("Something went wrong!"); } } -
Натыйжалар фильтрлери (Result Filters): Аракеттин натыйжасынын методуна чейин жана кийин ишке ашат (мисалы, ViewResult, JsonResult жана башка).
// Натыйжаны өзгөртүү үчүн Result Filter мисалы public class CustomResultFilter : IResultFilter { public void OnResultExecuting(ResultExecutingContext context) { // Натыйжа методуна чейин логика Console.WriteLine($"Executing result type: {context.Result.GetType().Name}"); } public void OnResultExecuted(ResultExecutedContext context) { // Натыйжа методуна кийин логика Console.WriteLine($"Executed result type: {context.Result.GetType().Name}"); } }
Фильтрлер глобалдуу (бардык суранычтар үчүн), контроллер деңгээлинде же конкреттүү аракеттин методу деңгээлинде колдонулушу мүмкүн. Алардын ишке ашырылышынын тартиби алардын түрүнө жараша аныкталган.