W kontekście tworzenia dynamicznych interfejsów użytkownika przy użyciu Razor Pages oraz ASP.NET Core MVC, kluczowe jest zrozumienie, jak działa model serwerowego renderowania stron. W Razor Pages struktura aplikacji opiera się na stronach .cshtml oraz ich powiązanych klasach .cshtml.cs, gdzie umieszczamy logikę i właściwości potrzebne do interakcji z widokiem.
Przykładem jest dodanie do pliku Index.cshtml.cs właściwości Message, która będzie przechowywać tekst wyświetlany w interfejsie użytkownika. Aby zarządzać listą produktów, tworzymy w projekcie folder Models i definiujemy klasę Product z właściwościami Id, Name oraz Price. Następnie, w klasie IndexModel, dodajemy listę produktów (Products) oraz właściwość Color, która może określać kolor wyświetlania elementów w UI.
Generowanie produktów odbywa się za pomocą metody GenerateProduct(int quantity), która losowo tworzy listę obiektów Product. Konstruktor klasy IndexModel inicjalizuje właściwości Products oraz Message, zapewniając, że po załadowaniu strony użytkownik zobaczy przykładową listę produktów wraz z komunikatem. Możliwość interakcji z użytkownikiem realizowana jest poprzez metody odpowiadające na żądania HTTP: OnPost(int quantity) generuje listę produktów na podstawie liczby podanej w formularzu, a OnGetDefineColor(int id) ustawia kolor w zależności od przekazanego parametru.
Ważnym elementem konwencji Razor Pages jest nazewnictwo metod obsługujących różne rodzaje żądań HTTP: OnGet, OnPost, OnDelete czy OnPut. Dzięki temu mechanizmowi framework automatycznie wywołuje odpowiednią metodę zależnie od typu żądania wysłanego przez klienta. Wiązanie parametrów z adresu URL lub formularza odbywa się przez mechanizm bindingu, który dopasowuje wartości do parametrów metody na podstawie nazw. W HTML-u wykorzystywana jest dyrektywa asp-route, która umożliwia przekazywanie parametrów do metody po stronie serwera, np. asp-route-id dla parametru id.
W przypadku ASP.NET Core MVC, architektura opiera się na wzorcu Model-View-Controller (MVC), który konsekwentnie oddziela warstwy odpowiedzialne za logikę biznesową (Model), prezentację danych (View) oraz zarządzanie przepływem i interakcjami użytkownika (Controller). Kontroler działa jako koordynator, reagując na żądania użytkownika, delegując logikę do modelu i zwracając odpowiednie widoki. Widoki w MVC to pliki .cshtml zorganizowane w folderze Views, lecz nie posiadają one powiązanych plików .cshtml.cs jak w Razor Pages. Z kolei folder Controllers zawiera klasy kontrolerów, których metody — zwane akcjami — odpowiadają na konkretne żądania, zwracając widoki, przekierowania lub dane.
Model MVC dzięki wyraźnemu rozdzieleniu odpowiedzialności sprzyja stosowaniu dobrych praktyk programistycznych, takich jak testowanie jednostkowe, ponieważ logika biznesowa jest odseparowana od warstwy prezentacji i może być rozwijana niezależnie. Struktura projektu MVC jest nieco bardziej rozbudowana niż Razor Pages, jednak zapewnia większą elastyczność w zarządzaniu złożonymi aplikacjami.
Istotnym aspektem jest to, że oba podejścia — Razor Pages i MVC — opierają się na serwerowym generowaniu stron, co oznacza, że każde działanie użytkownika, które wymaga zmiany danych lub interakcji, powoduje wysłanie żądania do serwera. Serwer przetwarza dane, wykonuje logikę zawartą w modelu lub kontrolerze, a następnie zwraca do klienta nową, zaktualizowaną stronę HTML. To podejście różni się od nowoczesnych aplikacji SPA (Single Page Application), gdzie wiele operacji wykonuje się po stronie klienta.
Zrozumienie konwencji i mechanizmów działania takich jak binding parametrów, nazewnictwo metod obsługujących różne typy żądań oraz sposób organizacji projektu, jest fundamentalne dla skutecznego korzystania z Razor Pages oraz ASP.NET Core MVC. W praktyce pozwala to tworzyć aplikacje o dobrze zorganizowanej strukturze, łatwe do rozwijania i utrzymania.
Warto mieć na uwadze, że choć serwerowe renderowanie UI zapewnia dużą kontrolę nad procesem generowania strony oraz bezpieczeństwem, może wiązać się z większym obciążeniem serwera i koniecznością odświeżania całej strony przy każdej interakcji. W zależności od wymagań projektu i oczekiwanej responsywności aplikacji, decyzja o wyborze modelu (Razor Pages czy MVC) powinna uwzględniać specyfikę i skalę rozwiązania.
Jak zarejestrować middleware w ASP.NET Core 9 przy użyciu metod rozszerzeń?
W ASP.NET Core 9, jednym z kluczowych elementów umożliwiających elastyczne zarządzanie ruchem HTTP jest middleware. Ścisłe zarządzanie jego rejestracją może znacząco poprawić czytelność oraz ułatwić utrzymanie aplikacji, szczególnie w przypadku rozbudowanych projektów. Middleware w ASP.NET Core można rejestrować za pomocą metod rozszerzeń, co pozwala na centralizację konfiguracji oraz oddzielenie odpowiedzialności. W tym rozdziale przyjrzymy się, jak za pomocą tej techniki zorganizować rejestrację middleware w aplikacji ASP.NET Core 9.
W przypadku standardowych middleware dostarczanych przez ASP.NET Core 9, takich jak middleware do limitowania liczby zapytań, odpowiednie metody rozszerzeń są już dostępne. Jednak w przypadku tworzenia własnego middleware, każda niestandardowa funkcjonalność musi być zarejestrowana za pomocą metod rozszerzeń, takich jak UseMiddleware<>. Często spotykaną praktyką jest tworzenie oddzielnych metod rozszerzeń, które centralizują rejestrację różnych komponentów middleware, upraszczając kod i zapewniając większą modularność.
Aby stworzyć metodę rozszerzenia dla rejestracji middleware, należy utworzyć nową klasę w folderze Middlewares, którą nazwiemy CommonMiddlewareExtension.cs. W tej klasie zdefiniujemy niezbędne metody, które będą odpowiadały za konfigurację i rejestrację poszczególnych elementów middleware. Oto przykładowa implementacja:
W powyższym kodzie zdefiniowaliśmy metodę AddCustomRateLimiting, która dodaje różne polityki limitowania zapytań: "fixed", "sliding" oraz "tokenBucket". Dodatkowo, metoda UseCommonApplicationMiddleware rejestruje niestandardowe middleware oraz middleware limitowania zapytań w potoku HTTP aplikacji.
Kolejnym krokiem jest zmiana pliku Program.cs, w którym rejestrujemy nasze metody rozszerzeń. Poniżej przedstawiamy kod, który włącza wszystkie wcześniej zdefiniowane middleware:
Dzięki tej metodzie kod w pliku Program.cs staje się znacznie bardziej przejrzysty i łatwiejszy do utrzymania, gdyż wszystkie operacje związane z rejestracją middleware są scentralizowane w jednym miejscu. Metody rozszerzeń pozwalają na oddzielenie logiki konfiguracji od głównego przepływu aplikacji, co zwiększa modularność oraz ułatwia przyszłe zmiany.
Warto zauważyć, że stosowanie metod rozszerzeń przy rejestracji middleware jest dobrą praktyką, ponieważ umożliwia utrzymanie porządku w aplikacji, a także poprawia czytelność kodu. Ponadto, takie podejście pozwala na łatwiejsze zarządzanie i modyfikację poszczególnych elementów aplikacji w miarę jej rozwoju.
W kolejnych rozdziałach tej książki omówimy inne techniki, które pozwolą na jeszcze większą elastyczność aplikacji ASP.NET Core 9, takie jak zarządzanie konfiguracjami w sposób bezpieczny czy integracja z systemami zewnętrznymi.
Jak ściany wpływają na turbulencję nadciekłą?
Jakie były konsekwencje ustawy McCarrana-Waltera dla amerykańskiej demokracji i jej wizerunku na świecie?
Jak rozwiązywać układy dynamiczne pod wpływem Poissona białego szumu: Metody perturbacyjne

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский