Created
December 3, 2025 12:02
-
-
Save sunmeat/2ed098783cb2d852f1c6a8b8bcf30cbb to your computer and use it in GitHub Desktop.
terminal middleware component asp .net core
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // CreateBuilder створює новий екземпляр WebApplicationBuilder із попередньо встановленими параметрами. | |
| // до методу CreateBuilder можна передавати аргументи командного рядка, вказані під час запуску додатка. | |
| var builder = WebApplication.CreateBuilder(args); | |
| // метод Build створює екземпляр веб-додатка | |
| var app = builder.Build(); | |
| /* окрім створення об’єкта WebApplication, клас WebApplicationBuilder виконує | |
| ще низку завдань, серед яких можна виділити такі: | |
| - налаштування конфігурації додатка | |
| - додавання сервісів | |
| - налаштування логування в додатку | |
| - встановлення середовища виконання додатка | |
| - конфігурація об’єктів IHostBuilder та IWebHostBuilder, | |
| які використовуються для створення хоста додатка | |
| */ | |
| // метод Run додає т.зв. ТЕРМІНАЛЬНИЙ middleware-компонент у конвеєр обробки запитів. | |
| // термінальний middleware призначений для завершення обробки запиту. | |
| // саме тому компонент, визначений через метод Run, не викликає інші компоненти | |
| // і не передає обробку запиту далі. | |
| app.Run(HandleRequest); // додає термінальний middleware-компонент, але НЕ ЗАПУСКАЄ СЕРВЕР !!! | |
| // при натисканні на посилання буде викликаєтися метод HandleRequest | |
| // Run без параметрів запускає додаток, | |
| // і веб-сервер починає прослуховувати всі вхідні HTTP-запити | |
| app.Run(); // додаток починає обробляти запити, саме цей виклик покаже три посилання у браузері | |
| // без цього рядка додаток не буде працювати, тому що сервер не запуститься! | |
| // виглядає дивно, але це особливість ASP.NET Core Empty проєктів | |
| // наприклад, у проєкті типу Web Minimal API цей рядок вже не буде потрібен, там його згенерує студія автоматично | |
| async Task HandleRequest(HttpContext context) // термінальний middleware-компонент, спрацьвовує при отриманні чергового запиту (при натисканні на посилання) | |
| { | |
| /* при отриманні запиту сервер формує на його основі об’єкт типу HttpContext, | |
| який містить всю необхідну інформацію про запит. | |
| ця інформація через об’єкт HttpContext передається всім | |
| компонентам middleware у додатку. */ | |
| // Request: повертає об’єкт HttpRequest, | |
| // який зберігає інформацію про поточний запит. | |
| // Query: повертає колекцію параметрів із рядка запиту. | |
| var name = context.Request.Query["Name"]; | |
| var surname = context.Request.Query["Surname"]; | |
| // формування HTML-відповіді в рантаймі | |
| string responseStr = "<!DOCTYPE html>" + | |
| "<html><head><meta charset='utf-8'></head><body><h1>" + | |
| name + " " + surname + "</h1>" + | |
| "<a href='/?Name=Леся&Surname=Українка'>Поет 1</a><br />" + // / на початку посилання означає - корінь сайту | |
| "<a href='/?Name=Тарас&Surname=Шевченко'>Поет 2</a><br />" + | |
| "<a href='/?Name=Іван&Surname=Франко'>Поет 3</a><br />" + | |
| "</body></html>"; | |
| // Response: повертає об’єкт HttpResponse, | |
| // який дозволяє керувати відповіддю клієнту | |
| // ContentType: отримує або встановлює заголовок Content-Type | |
| context.Response.ContentType = "text/html; charset=utf-8"; // встановлення типу вмісту відповіді для клієнта | |
| // WriteAsync(): надсилає певний вміст клієнту. | |
| await context.Response.WriteAsync(responseStr); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment