Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created December 3, 2025 12:02
Show Gist options
  • Select an option

  • Save sunmeat/2ed098783cb2d852f1c6a8b8bcf30cbb to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/2ed098783cb2d852f1c6a8b8bcf30cbb to your computer and use it in GitHub Desktop.
terminal middleware component asp .net core
// 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