C# 12 i .NET 8 dla programistów aplikacji wieloplatformowych. Twórz aplikacje, witryny WWW oraz serwisy sieciowe za pomocą ASP.NET Core 8, Blazor i EF Core 8. Wydanie VIII
SPIS TREŚCI
O autorze
O korektorze merytorycznym
Wstęp
Rozdział 1. Cześć, C#! Witaj, .NET!
Wprowadzenie do książki i jej zawartości
Pobieranie kodu przygotowanego dla tej książki
Pojęcia związane z .NET używane w tej książce
Struktura książki i używany w niej styl
Tematy omawiane w tej książce
Konfigurowanie środowiska programistycznego
Wybieranie narzędzia i typu aplikacji właściwych do nauki
Instalowanie na wielu platformach
Pobieranie i instalowanie Visual Studio 2022 dla Windows
Pobieranie i instalowanie Microsoft Visual Studio Code
Poznawanie .NET
Plany obsługi platformy .NET
Poznawanie języka IL
Porównanie technologii .NET
Zarządzanie wieloma projektami w edytorach kodu
Tworzenie aplikacji konsoli za pomocą Visual Studio 2022
Pisanie kodu za pomocą Visual Studio 2022
Kompilowanie i uruchamianie kodu w Visual Studio
Programy najwyższego poziomu
Wymagania programów najwyższego poziomu
Ujawnianie przestrzeni nazwy klasy Program
Dodawanie drugiego projektu w Visual Studio 2022
Tworzenie aplikacji konsoli za pomocą Visual Studio Code
Pisanie kodu za pomocą Visual Studio Code
Kompilowanie i uruchamianie kodu za pomocą polecenia dotnet
Dodawanie drugiego projektu w Visual Studio Code
Podsumowanie kroków wykonanych w Visual Studio Code
Podsumowanie innych typów projektów używanych w tej książce
Wykorzystywanie repozytorium GitHuba w tej książce
Kod aplikacji tworzonych w tej książce
Pobieranie kodu rozwiązań z repozytorium GitHuba
Używanie systemu Git w Visual Studio Code
Gdzie znaleźć pomoc?
Przeglądanie dokumentacji Microsoftu
Linki do dokumentacji używane w tej książce
Uzyskiwanie pomocy dla narzędzia dotnet
Przeglądanie definicji typów i ich elementów
Konfigurowanie wskazówek w tekście
Poszukiwanie odpowiedzi na Stack Overflow
Poszukiwanie odpowiedzi za pomocą Google
Przeszukiwanie kodu źródłowego .NET
Subskrybowanie blogów
Filmy Scotta Hanselmana
Narzędzia AI, takie jak ChatGPT i GitHub Copilot
Wyłączanie narzędzi, gdy zaczynają przeszkadzać
Praktyka i ćwiczenia
Ćwiczenie 1.1 – sprawdź swoją wiedzę
Ćwiczenie 1.2 – ćwicz C# gdzie się da
Ćwiczenie 1.3 – dalsza lektura
Ćwiczenie 1.4 – używanie notatników Polyglot
Ćwiczenie 1.5 – motywy kolorystyczne w nowoczesnym .NET
Ćwiczenie 1.6 – darmowa nauka C# i certyfikacja
Ćwiczenie 1.7 – wersje alfa platformy .NET
Podsumowanie
Rozdział 2. Mówimy w C#
Wprowadzenie do języka C#
Rozpoznawanie wersji oraz funkcji języka
Standardy języka C#
Odczytywanie wersji używanego kompilatora C#
Wyświetlanie numeru wersji kompilatora
Poznawanie gramatyki i słownictwa języka C#
Gramatyka języka C#
Instrukcje
Komentarze
Bloki
Przykłady instrukcji i bloków
Słownictwo języka C#
Porównanie języków programowania do języków ludzkich
Zmiana schematu kolorów składni języka C#
Pomoc przy pisaniu kodu
Importowanie przestrzeni nazw
Niejawne i globalne importowanie przestrzeni nazw
Czasowniki jako metody
Rzeczowniki to typy, pola i zmienne
Ujawnienie wielkości słownika języka C#
Przykład prośby do ChatGPT o wyjaśnienie kodu
Praca ze zmiennymi
Nazywanie zmiennych i przypisanie wartości
Literały
Przechowywanie tekstu
Przechowywanie liczb
Przechowywanie liczb rzeczywistych
Przechowywanie wartości logicznych
Zapisywanie obiektów dowolnego typu
Przechowywanie typów dynamicznych
Deklarowanie zmiennych lokalnych
Odczytywanie i ustalanie domyślnych wartości typów
Dokładniejsze poznawanie aplikacji konsoli
Wyświetlanie informacji dla użytkownika
Pobieranie danych od użytkownika
Uproszczone korzystanie z konsoli
Odczytywanie naciśnięć klawiszy
Odczytywanie parametrów aplikacji konsoli
Ustalanie opcji za pomocą argumentów
Obsługiwanie platform nieobsługujących wybranych API
Instrukcje async i await
Poprawianie reakcji aplikacji konsoli
Praktyka i ćwiczenia
Ćwiczenie 2.1 – sprawdź swoją wiedzę
Ćwiczenie 2.2 – sprawdź swoją wiedzę o typach liczbowych
Ćwiczenie 2.3 – poznaj wielkości i zakresy liczb
Ćwiczenie 2.4 – dalsza lektura
Ćwiczenie 2.5 – Pakiet Spectre
Podsumowanie
Rozdział 3. Sterowanie przepływem, konwertowanie typów i obsługa wyjątków
Działania na zmiennych
Operatory dwuargumentowe
Operatory jednoargumentowe
Operatory trójargumentowe
Objaśnienie operatorów jednoargumentowych
Objaśnianie dwuargumentowych operatorów arytmetycznych
Operatory przypisania
Operatory pomijania wartości null
Operatory logiczne
Warunkowe operatory logiczne
Operatory bitowe i operatory przesunięć
Operatory różne
Instrukcje wyboru
Instrukcja if
Dopasowywanie wzorców z instrukcją if
Instrukcja switch
Dodawanie nowego elementu do projektu w Visual Studio 2022
Dopasowywanie wzorców z instrukcją switch
Upraszczanie instrukcji switch za pomocą wyrażeń switch
Instrukcje iteracji
Instrukcja while
Instrukcja do
Instrukcja for
Instrukcja foreach
Zapisywanie wielu wartości w tablicy
Praca z tablicami jednowymiarowymi
Praca z tablicami wielowymiarowymi
Praca z tablicami poszarpanymi
Dopasowywanie wzorców list w tablicach
Tablice inline
Podsumowanie tablic
Rzutowanie i konwertowanie między typami
Jawne i niejawne rzutowanie liczb
Zapisywanie liczb ujemnych w postaci binarnej
Używanie typu System.Convert
Zaokrąglanie liczb
Kontrolowanie sposobu zaokrąglania
Konwersja z dowolnego typu na ciąg znaków
Konwertowanie obiektu binarnego na ciąg znaków
Parsowanie ciągów znaków z liczbami, datami i czasem
Konwencja nazywania metod ze słowem Try
Obsługa wyjątków
Instrukcja try
Wykrywanie przepełnień
Instrukcja checked
Instrukcja unchecked
Praktyka i ćwiczenia
Ćwiczenie 3.1 – sprawdź swoją wiedzę
Ćwiczenie 3.2 – pętle i przepełnienia
Ćwiczenie 3.3 – sprawdź swoją wiedzę o operatorach
Ćwiczenie 3.4 – pętle i operatory
Ćwiczenie 3.5 – obsługa wyjątków
Ćwiczenie 3.6 – poznaj notatniki C#
Ćwiczenie 3.7 – dalsza lektura
Podsumowanie
Rozdział 4. Pisanie, debugowanie i testowanie funkcji
Tworzenie funkcji
Programy i funkcje najwyższego poziomu
Co jest automatycznie generowane dla funkcji lokalnej?
Definiowanie częściowej klasy Program z funkcjami statycznymi
Co jest generowane automatycznie dla funkcji statycznej?
Przykład z tabliczką mnożenia
Dygresja na temat argumentów i parametrów
Pisanie funkcji zwracającej wartość
Rekurencyjne obliczanie silni
Dokumentowanie funkcji za pomocą komentarzy XML
Używanie wyrażeń lambda w implementacji funkcji
Debugowanie tworzonego programu
Tworzenie aplikacji z celowym błędem
Tworzenie punktu przerwania
Pasek narzędzi debugowania
Okna debugowania
Krokowe wykonywanie kodu
Używanie zintegrowanego terminala Visual Studio Code podczas debugowania
Dostosowywanie punktów przerwania
Przeładowywanie na gorąco w trakcie programowania
Przeładowywanie na gorąco w Visual Studio 2022
Przeładowywanie na gorąco w Visual Studio Code i w wierszu poleceń
Protokołowanie
Dostępne opcje protokołowania
Wykorzystywanie typów Debug i Trace
Konfigurowanie obiektów nasłuchujących
Przełączanie poziomów śledzenia
Protokołowanie informacji o kodzie źródłowym
Testy jednostkowe
Różne rodzaje testów
Tworzenie biblioteki klas wymagającej testowania
Tworzenie testów jednostkowych
Rzucanie i wychwytywanie wyjątków w funkcjach
Rozróżnienie błędów użycia i błędów wykonania
Wyjątki często rzucane w funkcjach
Rzucanie wyjątków za pomocą klauzul ochronnych
Czym jest stos wywołań?
Gdzie należy wychwytywać wyjątki?
Ponowne rzucanie wyjątku
Implementowanie wzorca tester-wykonawca i wzorca próby
Praktyka i ćwiczenia
Ćwiczenie 4.1 – sprawdź swoją wiedzę
Ćwiczenie 4.2 – tworzenie funkcji z wykorzystaniem debugowania i testów jednostkowych
Ćwiczenie 4.3 – dalsza lektura
Podsumowanie
Rozdział 5. Tworzenie własnych typów w programowaniu obiektowym
Programowanie obiektowe
Tworzenie bibliotek klas
Tworzenie biblioteki klas
Przestrzenie nazw o zasięgu całego pliku
Definiowanie klasy w przestrzeni nazw
Modyfikatory dostępu
Elementy klasy
Importowanie przestrzeni nazw, aby użyć wybranego typu
Tworzenie obiektów
Przechowywanie danych w polach
Definiowanie pól
Typy pól
Modyfikatory dostępu
Ustalanie i wypisywanie wartości pól
Ustalanie wartości pól za pomocą składni inicjalizacji obiektu
Zapisywanie wartości za pomocą słowa kluczowego enum
Przechowywanie wielu wartości w typie enum
Zapisywanie wielu wartości za pomocą kolekcji
Kolekcje generyczne
Tworzenie pól statycznych
Tworzenie stałych pól
Tworzenie pól tylko do odczytu
Wymaganie podania wartości właściwości przy tworzeniu obiektu
Inicjalizowanie pól w konstruktorach
Praca z metodami i krotkami
Zwracanie wartości z metody
Sterowanie przekazywaniem parametrów
Przeciążanie metod
Parametry opcjonalne i nazywane
Mieszanie parametrów opcjonalnych i wymaganych
Sposoby przekazywania parametrów
Zwracanie wartości ze słowem kluczowym ref
Łączenie wielu wartości za pomocą krotki
Implementowanie funkcji lokalnych
Dzielenie klas na części
Kontrola dostępu za pomocą właściwości i indekserów
Definiowanie właściwości tylko do odczytu
Definiowanie właściwości z możliwością przypisania
Ograniczanie wartości typów wyliczeniowych
Definiowanie indekserów
Dopasowywanie wzorców z obiektami
Definiowanie listy pasażerów
Rozszerzenia dopasowywania wzorców w C# 9 i nowszych
Praca z rekordami
Właściwości wyłącznie inicjalizowane
Rekordy
Równość typów rekordowych
Pozycyjne elementy danych w rekordach
Definiowanie podstawowego konstruktora klasy
Praktyka i ćwiczenia
Ćwiczenie 5.1 – sprawdź swoją wiedzę
Ćwiczenie 5.2 – modyfikatory dostępu
Ćwiczenie 5.3 – dalsza lektura
Podsumowanie
Rozdział 6. Implementowanie interfejsów i dziedziczenie klas
Konfigurowanie biblioteki klas i aplikacji konsoli
Metody statyczne i przeciążanie operatorów
Implementowanie działań w metodzie
Implementowanie działań za pomocą operatora
Wykorzystywanie typów generycznych
Praca z typami niegenerycznymi
Praca z typami generycznymi
Wywoływanie i obsługa zdarzeń
Wywoływanie metod za pomocą delegatów
Przykłady używania delegatów
Status: to skomplikowane!
Definiowanie i obsługa delegatów
Definiowanie i obsługa zdarzeń
Implementowanie interfejsów
Typowe interfejsy
Porównywanie obiektów podczas sortowania
Porównywanie obiektów za pomocą osobnej klasy
Jawne i niejawne implementowanie interfejsów
Definiowanie interfejsów z domyślnymi implementacjami
Zarządzanie pamięcią za pomocą typów referencyjnych i typów wartości
Pamięć stosu i sterty
Definiowanie typów referencyjnych i typów wartości
Sposób przechowywania w pamięci typów referencyjnych i typów wartości
Boxing
Równość typów
Definiowanie typu kategorii struct
Praca z typami record struct
Zwalnianie niezarządzanych zasobów
Wymuszanie wywołania metody Dispose
Praca z wartościami null
Przekształcanie typu wartości w typ nullowalny
Inicjalizowanie typów nullowalnych
Poznawanie nullowalnych typów referencyjnych
Sterowanie funkcją ostrzeżeń dla typów nullowalnych
Wyłączanie innych ostrzeżeń kompilatora
Deklarowanie nienullowalnych zmiennych i parametrów
Sprawdzanie wartości null
Kontrolowanie wartości null w parametrach metod
Dziedziczenie klas
Rozbudowywanie klasy
Ukrywanie elementów
Słowa kluczowe this i base
Pokrywanie elementów klasy
Dziedziczenie po klasach abstrakcyjnych
Wybieranie między interfejsem a klasą abstrakcyjną
Blokowanie dziedziczenia i pokrywania
Polimorfizm
Rzutowanie w ramach hierarchii dziedziczenia
Rzutowanie niejawne
Rzutowanie jawne
Obsługa wyjątków rzutowania
Dziedziczenie i rozbudowywanie typów .NET
Dziedziczenie po wyjątku
Rozszerzanie typów, po których nie można dziedziczyć
Możliwości tworzenia własnych typów
Kategorie własnych typów i ich możliwości
Zmienność i rekordy
Dziedziczenie i implementowanie
Przeglądanie przykładowego kodu
Praktyka i ćwiczenia
Ćwiczenie 6.1 – sprawdź swoją wiedzę
Ćwiczenie 6.2 – tworzenie hierarchii dziedziczenia
Ćwiczenie 6.3 – pisanie lepszego kodu
Ćwiczenie 6.4 – dalsza lektura
Podsumowanie
Rozdział 7. Poznawanie typów .NET
Wprowadzenie do .NET 8
Sprawdzanie dostępności aktualizacji .NET SDK
Zestawy i przestrzenie nazw
Zestawy, pakiety i przestrzenie nazw
Poznawanie pakietów SDK dla projektów .NET
Przestrzenie nazw i typy w zestawach
Pakiety NuGet
Czym są frameworki?
Importowanie przestrzeni nazw w celu użycia typu
Związki słów kluczowych języka C# z typami .NET
Wieloplatformowe współdzielenie kodu z bibliotekami klas .NET Standard
Domyślne ustawienia bibliotek klas w różnych wersjach SDK
Tworzenie biblioteki klas .NET Standard
Kontrolowanie wersji .NET SDK
Mieszanie pakietów SDK i docelowych frameworków
Publikowanie własnych aplikacji
Tworzenie aplikacji konsoli do publikacji
Poznawanie polecenia dotnet
Pobieranie informacji na temat platformy .NET i jej środowiska
Zarządzanie projektami
Publikowanie samodzielnej aplikacji
Publikowanie aplikacji jednoplikowej
Zmniejszanie wielkości aplikacji
Kontrolowanie miejsca tworzenia artefaktów
Kompilacja native AOT
Dekompilowanie zestawów
Dekompilowanie za pomocą rozszerzenia ILSpy w Visual Studio 2022
Przeglądanie oryginalnych źródeł w Visual Studio 2022
Nie, nie można zablokować możliwości dekompilowania
Przygotowywanie własnych pakietów NuGet
Dodawanie odwołania do pakietu
Tworzenie pakietu dla NuGet
Przeszukiwanie pakietów NuGet
Testowanie pakietu
Praca z proponowanymi funkcjami
Wymaganie proponowanych funkcji
Włączanie proponowanych funkcji
Interceptory metod
Praktyka i ćwiczenia
Ćwiczenie 7.1 – sprawdź swoją wiedzę
Ćwiczenie 7.2 – dalsza lektura
Ćwiczenie 7.3 – przenoszenie kodu z .NET Framework do nowoczesnego .NET
Ćwiczenie 7.4 – tworzenie generatorów kodu źródłowego
Ćwiczenie 7.5 – PowerShell
Ćwiczenie 7.6 – poprawianie wydajności w .NET
Podsumowanie
Rozdział 8. Używanie typów .NET
Praca z liczbami
Praca z wielkimi liczbami całkowitymi
Praca z liczbami zespolonymi
Generowanie liczb losowych na potrzeby gier i podobnych aplikacji
Generowanie identyfikatorów GUID
Praca z tekstem
Odczytywanie długości ciągu znaków
Odczytywanie znaków z ciągu
Dzielenie ciągu znaków
Pobieranie części ciągu znaków
Poszukiwanie tekstu w ciągu
Porównywanie ciągów znaków
Inne elementy klasy string
Wydajne tworzenie ciągów znaków
Dopasowywanie wzorców za pomocą wyrażeń regularnych
Kontrolowanie cyfr wprowadzonych jako tekst
Poprawianie wydajności wyrażeń regularnych
Składnia wyrażenia regularnego
Przykłady wyrażeń regularnych
Dzielenie złożonych ciągów znaków rozdzielanych przecinkami
Włączanie kolorowania składni wyrażeń regularnych
Poprawianie wydajności wyrażeń regularnych za pomocą generatorów kodu
Praca z kolekcjami
Wspólne funkcje wszystkich kolekcji
Sortowanie kolekcji
Używanie specjalizowanych kolekcji
Kolekcje tylko do odczytu, niezmienne i zamrożone
Inicjalizowanie kolekcji za pomocą wyrażeń kolekcji
Dobre praktyki w pracy z kolekcjami
Praca z typem Span, indeksami i zakresami
Wydajne korzystanie z pamięci za pomocą typu Span
Określanie pozycji za pomocą typu Index
Definiowanie zakresów za pomocą typu Range
Używanie indeksów i zakresów
Praktyka i ćwiczenia
Ćwiczenie 8.1 – sprawdź swoją wiedzę
Ćwiczenie 8.2 – wyrażenia regularne
Ćwiczenie 8.3 – metody rozszerzające
Ćwiczenie 8.4 – praca z zasobami sieciowymi
Ćwiczenie 8.5 – dalsza lektura
Podsumowanie
Rozdział 9. Hardening i bezpieczeństwo
Program antywirusowy Microsoft Defender
Instalacja programu antywirusowego Microsoft Defender
Wykorzystanie interfejsu użytkownika
Wyłączanie programu antywirusowego Microsoft Defender
Czym w ogóle jest ATP?
Windows Defender ATP Exploit Guard
Zapora systemu Windows Defender – bez żartów
Trzy konsole administracyjne zapory systemu Windows
Trzy różne profile zapory
Tworzenie w zaporze nowej reguły przychodzącej
Tworzenie reguły zezwalającej na wysyłanie pingów (ICMP)
Zarządzanie zaporą WFAS przy użyciu zasad grupy
Technologie szyfrowania
BitLocker i wirtualny układ TPM
Chronione maszyny wirtualne
Szyfrowane sieci wirtualne
Encrypting File System
Protokoły IPsec
Azure AD Password Protection
Szczegółowe zasady dotyczące haseł
Zaawansowana analiza zagrożeń – koniec wsparcia
Czym jest (była) ATA?
Microsoft Defender for Identity
Najważniejsze wskazówki dotyczące ogólnego bezpieczeństwa
Pozbycie się wiecznych administratorów
Korzystanie z odrębnych kont w celu uzyskania dostępu administracyjnego
Używanie innego komputera do wykonywania zadań administracyjnych
Nigdy nie przeglądaj internetu, będąc zalogowanym na serwerze
Kontrola dostępu oparta na rolach
Just Enough Administration
Zmiana portu 3389 połączenia pulpitu zdalnego
Natychmiast wyłącz zewnętrzne połączenia pulpitu zdalnego
Wyłącz niebezpieczne protokoły szyfrowania
Podsumowanie
Pytania
Rozdział 10. Praca z bazami danych przy użyciu Entity Framework Core
Nowoczesne bazy danych
Czym jest Entity Framework?
Entity Framework Core
Co znaczy „najpierw baza danych” i „najpierw kod”?
Usprawnienia wydajności w EF Core
Używanie przykładowej relacyjnej bazy danych
Używanie SQLite
Konfigurowanie EF Core w projekcie .NET
Tworzenie aplikacji konsoli do pracy z EF Core
Tworzenie przykładowej bazy danych Northwind na serwerze SQLite
Zarządzanie przykładową bazą danych Northwind za pomocą SQLiteStudio
Używanie lekkiego dostawcy ADO.NET dla SQLite
Wybieranie dostawcy danych EF Core
Łączenie z bazą danych
Definiowanie klasy kontekstu bazy danych Northwind
Definiowanie modeli EF Core
Konwencje w EF Core
Atrybuty EF Core
Płynne API EF Core
Tworzenie modelu w EF Core
Dodawanie tabel do klasy kontekstu bazy danych Northwind
Konfigurowanie narzędzia dotnet-ef
Tworzenie modeli na podstawie istniejącej bazy danych
Dostosowywanie szablonów wstecznej inżynierii
Konfigurowanie konwencji
Zapytania do modelu EF Core
Filtrowanie dołączanych encji
Filtrowanie i sortowanie produktów
Pobieranie generowanych instrukcji SQL
Protokołowanie w EF Core
Pobieranie pojedynczej encji
Dopasowywanie wzorców za pomocą instrukcji Like
Generowanie liczb losowych w zapytaniach
Definiowanie globalnych filtrów
Wzorce ładowania i śledzenia w EF Core
Chętne ładowanie encji za pomocą metody rozszerzającej Include
Włączenie leniwego ładowania
Jawne ładowanie encji za pomocą metody Load
Kontrolowanie śledzenia encji
Manipulowanie danymi w EF Core
Wstawianie encji
Aktualizowanie encji
Usuwanie encji
Wydajniejsze aktualizowanie i usuwanie
Grupowanie kontekstów baz danych
Praktyka i ćwiczenia
Ćwiczenie 10.1 – sprawdź swoją wiedzę
Ćwiczenie 10.2 – eksportowanie danych z wykorzystaniem różnych formatów serializacji
Ćwiczenie 10.3 – praca z transakcjami
Ćwiczenie 10.4 – modele Code First w EF Code
Ćwiczenie 10.5 – sekrety aplikacji
Ćwiczenie 10.6 – dalsza lektura
Ćwiczenie 10.7 – poznawanie baz danych NoSQL
Podsumowanie
Rozdział 11. Odczytywanie danych i manipulowanie nimi za pomocą LINQ
Tworzenie wyrażeń LINQ
Porównanie imperatywnych i deklaratywnych funkcji języka
Z czego składa się LINQ?
Rozbudowa sekwencji za pomocą klas wyliczeniowych
LINQ w praktyce
Czym jest opóźnione wykonanie?
Filtrowanie encji za pomocą metody Where
Korzystanie z metody nazwanej
Upraszczanie kodu przez usunięcie jawnego tworzenia delegata
Korzystanie z wyrażenia lambda
Sortowanie encji
Sortowanie według elementów
Deklarowanie zapytania za pomocą słowa kluczowego var lub określonego typu
Filtrowanie według typu
Praca ze zbiorami
Używanie LINQ z EF Core
Tworzenie aplikacji konsoli do nauki LINQ dla Encji
Tworzenie modelu danych EF Core
Filtrowanie i sortowanie sekwencji
Projekcje sekwencji na nowe typy
Łączenie i grupowanie
Grupowanie wyszukiwań
Agregowanie i stronicowanie sekwencji
Sprawdzanie, czy sekwencja nie jest pusta
Uważaj na właściwość Count!
Stronicowanie z LINQ
Upiększanie składni
Praktyka i ćwiczenia
Ćwiczenie 11.1 – sprawdź swoją wiedzę
Ćwiczenie 11.2 – zapytania LINQ
Ćwiczenie 11.3 – używanie wielu wątków w zapytaniach LINQ
Ćwiczenie 11.4 – praca z LINQ to XML
Ćwiczenie 11.5 – tworzenie własnych metod rozszerzających LINQ
Ćwiczenie 11.6 – dalsza lektura
Podsumowanie
Rozdział 12. Wprowadzenie do aplikacji sieciowych w ASP.NET Core
Czym jest ASP.NET Core?
Klasyczna ASP.NET kontra ASP.NET Core
Tworzenie stron WWW za pomocą ASP.NET Core
Tworzenie serwisów sieciowych
Struktury projektów
Struktura projektów w rozwiązaniu
Tworzenie modelu encji używanego w tej książce
Tworzenie bazy danych Northwind
Tworzenie biblioteki klas dla modelu encji bazy SQLite
Dostosowanie modelu i definiowanie metod rozszerzających
Rejestrowanie zakresu zależnego serwisu
Tworzenie biblioteki klas modelu encji dla SQL Server
Testowanie bibliotek klas
Tworzenie w sieci WWW
Protokół HTTP
Używanie Google Chrome do wykonywania żądań HTTP
Tworzenie oprogramowania dla sieci WWW po stronie klienta
Praktyka i ćwiczenia
Ćwiczenie 12.1 – sprawdź swoją wiedzę
Ćwiczenie 12.2 – znasz te skrótowce?
Ćwiczenie 12.3 – dalsza lektura
Podsumowanie
Rozdział 13. Tworzenie witryn WWW przy użyciu ASP.NET Core Razor Pages
ASP.NET Core
Tworzenie pustego projektu ASP.NET Core
Testowanie i zabezpieczanie witryny
Kontrola środowiska hostingowego
Włączanie plików statycznych
Żądania w przeglądarce podczas tworzenia aplikacji
Technologia Razor Pages
Włączanie technologii Razor Pages
Definiowanie strony Razor
Używanie wspólnego układu w wielu stronach Razor
Tymczasowe przechowywanie danych
Używanie plików code-behind w stronach Razor
Konfigurowanie plików dołączanych do projektu ASP.NET Core
Operacje kompilowania pliku projektu
Używanie Entity Framework Core z ASP.NET Core
Konfigurowanie Entity Framework Core jako serwisu
Manipulowanie danymi na stronach Razor
Wstrzykiwanie zależnego serwisu na stronę Razor
Konfigurowanie serwisów i potoku obsługi żądań HTTP
Routowanie punktów końcowych
Konfigurowanie routowania punktów końcowych
Przeglądanie konfiguracji routowania punktów końcowych w naszym projekcie
Przygotowywanie potoku obsługi żądań HTTP
Podsumowanie najważniejszych metod rozszerzających oprogramowania pośredniczącego
Wizualizacja potoku HTTP
Implementowanie oprogramowania pośredniczącego jako anonimowego delegata
Praktyka i ćwiczenia
Ćwiczenie 13.1 – sprawdź swoją wiedzę
Ćwiczenie 13.2 – używanie bibliotek klas Razor
Ćwiczenie 13.3 – włączenie HTTP/3 i obsługa dekompresji żądań
Ćwiczenie 13.4 – tworzenie witryny obsługującej dane
Ćwiczenie 13.5 – zastępowanie aplikacji konsoli stronami WWW
Ćwiczenie 13.6 – wprowadzenie do biblioteki Bootstrap
Ćwiczenie 13.7 – dalsza lektura
Ćwiczenie 13.8 – tworzenie witryn WWW za pomocą wzorca Model-View-Controller
Podsumowanie
Rozdział 14. Tworzenie i używanie serwisów sieciowych
Tworzenie serwisów w technologii ASP.NET Core Web API
Skróty stosowane w serwisach sieciowych
Żądania i odpowiedzi HTTP w Web API
Tworzenie projektu ASP.NET Core Web API
Sprawdzanie funkcji serwisu sieciowego
Tworzenie serwisu internetowego dla bazy danych Northwind
Rejestrowanie serwisów zależnych
Tworzenie repozytorium danych dla encji
Routowanie w serwisach sieciowych
Konfigurowanie repozytorium klientów i kontrolera Web API
Podawanie szczegółów problemu
Kontrola nad serializacją XML
Dokumentowanie i testowanie serwisów
Testowanie żądań GET za pomocą przeglądarki
Testowanie żądań HTTP za pomocą narzędzi HTTP/REST
Włączanie narzędzia Swagger
Testowanie żądań w narzędziu SwaggerUI
Włączanie protokołowania HTTP
Obsługa protokołowania dodatkowych nagłówków żądań w systemie W3CLogger
Używanie serwisu za pomocą klientów HTTP
Klasa HttpClient
Konfigurowanie klientów HTTP za pomocą klasy HttpClientFactory
Pobieranie w kontrolerze listy klientów w formacie JSON
Uruchamianie wielu projektów
Uruchamianie projektów serwisu sieciowego i klienta MVC
Praktyka i ćwiczenia
Ćwiczenie 14.1 – sprawdź swoją wiedzę
Ćwiczenie 14.2 – ćwiczenia w tworzeniu i usuwaniu klientów za pomocą HttpClient
Ćwiczenie 14.3 – implementowanie zaawansowanych funkcji serwisów sieciowych
Ćwiczenie 14.4 – tworzenie serwisów sieciowych za pomocą minimalnego API
Ćwiczenie 14.5 – dalsza lektura
Podsumowanie
Rozdział 15. Tworzenie interfejsów użytkownika w technologii Blazor
Technologia Blazor
JavaScript i podobne
Silverlight – C# i .NET w formie wtyczki
WebAssembly – podstawa technologii Blazor
Różne modele hostowania komponentów Blazora w .NET 7 i starszych
Unifikacja modeli hostowania Blazor w .NET 8
Omówienie komponentów tworzonych za pomocą Blazora
Czym różnią się Blazor i Razor?
Przeglądanie szablonu projektu Blazor Web App
Tworzenie projektu Blazor Web App
Routing, układy i nawigacja w aplikacji Blazor
Klasy komponentów bazowych
Uruchamianie szablonu projektu Blazor Web App
Tworzenie komponentów Blazor
Definiowanie i testowanie prostego komponentu
Używanie ikon Bootstrapa
Przekształcanie komponentu w routowalny komponent stronicowy
Dodawanie encji do komponentu
Tworzenie abstrakcji serwisu dla komponentu Blazora
Definiowanie formularzy za pomocą komponentu EditForm
Tworzenie i używanie komponentu formularza danych klienta
Tworzenie komponentów do tworzenia, edytowania i usuwania klientów
Włączanie interakcji po stronie serwera
Testowanie komponentu formularza danych klienta
Włączanie wykonywania po stronie klienta z wykorzystaniem WebAssembly
Praktyka i ćwiczenia
Ćwiczenie 15.1 – sprawdź swoją wiedzę
Ćwiczenie 15.2 – przygotowanie komponentu tabliczki mnożenia
Ćwiczenie 15.3 – przygotowanie elementu nawigowania według krajów
Ćwiczenie 15.4 – rozbudowywanie aplikacji Blazora
Ćwiczenie 15.5 – używanie otwartych bibliotek komponentów Blazora
Ćwiczenie 15.6 – dalsza lektura
Podsumowanie
Epilog
Opinie
Na razie nie ma opinii o produkcie.