ASP.NET Core 9 přináší mnoho nových nástrojů a možností pro vývojáře, kteří se chtějí zaměřit na tvorbu moderních webových aplikací a API. Tento framework je flexibilní, škálovatelný a dobře přizpůsobitelný pro cloudové prostředí, což z něj činí ideální volbu pro současné potřeby webového vývoje.

V rámci ASP.NET Core 9 se setkáváme s několika klíčovými technologiemi, které poskytují robustní nástroje pro tvorbu dynamických uživatelských rozhraní a rozhraní pro práci s daty. Razor Pages, MVC a Blazor jsou tři hlavní komponenty, které si podrobněji prozkoumáme, a ukážeme si, jak je možné je použít pro efektivní vývoj aplikací.

Razor Pages a MVC jsou ideální pro strukturované, serverové generování dynamických stránek. Razor Pages usnadňuje vývoj jednoduchých aplikací, které nevyžadují složité směrování. MVC (Model-View-Controller) je robustnější a umožňuje flexibilnější správu aplikací s většími a složitějšími požadavky na směrování a manipulaci s daty.

Blazor naopak přináší nový přístup k vývoji moderních webových aplikací, které umožňují vývojářům psát interaktivní UI komponenty pomocí C# namísto tradičního JavaScriptu. Blazor může být spuštěn na serveru (Blazor Server) nebo přímo v prohlížeči pomocí WebAssembly (Blazor WebAssembly). Tento přístup výrazně zjednodušuje práci s kódem a integraci mezi klientem a serverem.

Je důležité si uvědomit, že ASP.NET Core 9 je navržen tak, aby byl snadno přenositelný mezi různými platformami. Tento multiplatformní přístup znamená, že aplikace napsané v tomto frameworku mohou běžet na Windows, Linuxu i macOS. Při práci na vývoji aplikací byste měli věnovat pozornost také správné konfiguraci vývojového prostředí, aby všechny nástroje fungovaly efektivně a bez problémů.

Velmi užitečným nástrojem pro vývojáře je příkazová řádka (CLI), která umožňuje snadné spouštění a správu projektů bez nutnosti použití plného IDE. CLI umožňuje rychlou tvorbu aplikací, instalaci potřebných balíčků a správu verzí. Díky tomu je možné efektivně pracovat i v prostředí, kde není k dispozici plnohodnotné vývojové prostředí, například na vzdálených serverech nebo v automatizovaných build procesech.

Pokud jde o práci s daty, ASP.NET Core 9 nabízí podporu pro různé typy databází a persistence mechanizmy, od tradičních SQL databází po NoSQL řešení. Tato flexibilita je zásadní pro aplikace, které potřebují pracovat s různorodými datovými zdroji a zajišťovat vysoký výkon i ve škálovaných systémech. K dispozici jsou i nástroje pro práci s ORM (Object-Relational Mapping), jako je Entity Framework Core, které výrazně zjednodušují práci s databázemi a poskytují efektivní mechanismy pro migrace a správu dat.

ASP.NET Core 9 rovněž podporuje bezpečnostní standardy, jako je OAuth a OpenID Connect, pro implementaci bezpečných autentifikačních a autorizačních mechanismů. Pro moderní webové aplikace je bezpečnost klíčová a framework poskytuje bohaté možnosti pro správu uživatelských práv, šifrování komunikace a prevenci běžných zranitelností, jako je SQL injection nebo Cross-Site Scripting (XSS).

Vedle zmíněných funkcí by vývojář měl mít na paměti, že ASP.NET Core 9 neustále evoluuje. To znamená, že je nezbytné se pravidelně seznámit s novými verzemi a vylepšeními frameworku. Při používání tohoto frameworku je také dobré dbát na optimální nasazení do produkčního prostředí, což může zahrnovat ladění výkonu, optimalizaci kódu a správné nasazení na cloudové služby, jako je Azure nebo AWS.

Jedním z hlavních přínosů ASP.NET Core 9 je jeho schopnost snadno komunikovat s dalšími technologiemi a frameworky. Blazor a JavaScript frameworks jako React nebo Angular mohou být bez problémů integrovány s ASP.NET Core 9 pro tvorbu moderních a interaktivních webových aplikací. Tento přístup umožňuje vývojářům využívat výhod obou světů – robustnosti C# a výkonu JavaScriptu.

Pro vývojáře, kteří se chtějí zaměřit na rychlý vývoj API a mikroservisů, ASP.NET Core 9 přináší efektivní nástroje pro tvorbu RESTful API, s možností implementace minimálních API pro rychlé a efektivní řešení. S tímto frameworkem se můžete zaměřit na agilní vývoj a rychlé iterace, což je klíčové v dnešním rychlém vývojovém cyklu.

Ve světě vývoje je nezbytné mít na paměti, že samotné znalosti frameworku nestačí. Důležité je také pochopit, jak správně navrhnout architekturu aplikací, jak optimalizovat výkonnost a jak se postarat o údržbu kódu v dlouhodobém horizontu. Využití správných nástrojů a metodologií, jako je Test-Driven Development (TDD) nebo Continuous Integration (CI), může zásadně ovlivnit kvalitu a stabilitu konečného produktu.

Jaký význam má ASP.NET Core 9 pro vývojáře?

Microsoft zahájil jednostranný proces restrukturalizace a redesignu své platformy, přičemž přijal model otevřeného zdroje, který vývojářské komunitě poskytl možnost přijmout robustní model vývoje nezávislý na operačním systému. Poslední verzí ASP.NET, která běžela výhradně na operačním systému Windows, byla verze 4.x. Po redesignu byla platforma přejmenována na ASP.NET Core, která je v současnosti ve verzi 9 STS (Standard Term Support). ASP.NET Core 9 se nedávno stala vysoce bohatou platformou, která umožňuje poskytování řešení pro různé typy účelů a co více, s plnou podporou a zaměřením na komunitu otevřeného zdroje.

Použití ASP.NET Core 9 nám poskytuje bohatý nástroj s těmito výhodami:

  • Možnost vyvíjet webová uživatelská rozhraní

  • Možnost vyvíjet webové API

  • Interoperabilita mezi operačními systémy

  • Příprava pro cloud

  • Vysoký výkon

  • Integrace s moderními frameworky pro klientskou stranu

  • Použití osvědčených postupů a designových standardů

Je to kompletní platforma, která sjednocuje vše potřebné pro vývoj bohatých řešení využívajících nejlepší praktiky, technologie a další aspekty, které se budete učit během kapitol této knihy.

Proč ASP.NET Core 9?

ASP.NET Core 9 obsahuje několik důležitých vylepšení výkonu oproti verzi ASP.NET Core 7, což ji činí nejvýkonnější verzí, která byla kdy vydána. Některé z hlavních bodů zlepšení zahrnují:

  • Rychlejší spuštění a výkon: ASP.NET Core 9 je rychlejší než předchozí verze. Každá verze dostává mnoho příspěvků od technické komunity. Runtime pro aplikace, který je zodpovědný za jejich spuštění, obsahuje vylepšení jako optimalizace smyček, zlepšení generování kódu a zlepšení garbage collectoru.

  • Výkon Minimal API: Podle benchmarků je nová verze Minimal API o 15 % rychlejší než předchozí verze a spotřebovává o 93 % méně paměti.

  • Nativní AOT (Ahead-of-Time) kompilace: Rozšířená podpora pro AOT v ASP.NET Core 9 umožňuje kompilaci aplikací do nativního kódu, což zmenšuje diskovou stopu, zlepšuje dobu spuštění a snižuje spotřebu paměti. To je ideální pro prostředí cloud-native.

  • Zlepšení ML.NET: Verze ML.NET 4.0 přináší důležitá vylepšení, která umožňují integrace s modely strojového učení. Byly přidány také tokenizerové podpory, které jsou nezbytné pro moderní IA modely.

  • .NET Aspire: Tato novinka, která byla zavedena v předchozí verzi .NET 9, přidává vylepšený cloud-ready stack pro vývoj distribuovaných aplikací v ASP.NET Core 9. Mnoho problémů, které vznikají při vývoji cloud-native aplikací, bylo abstrahováno pomocí .NET Aspire, který kombinuje několik NuGet balíčků a šablon projektů.

  • .NET MAUI: .NET MAUI (Multi-platform Application UI) poskytuje jednotný způsob vývoje aplikací pro různé platformy, jako jsou Web a Mobil, včetně iOS a Androidu. MAUI přineslo zlepšení kvality testování, scénářových testů a opravy chyb. Nyní, jako součást šablon projektů ASP.NET Core 9, je k dispozici hybridní projekt zahrnující MAUI integrovaný s Blazor. Tento projekt umožňuje vývoj aplikací nejen pro web, ale i pro mobilní zařízení a Windows.

  • Entity Framework Core: Entity Framework Core je jedním z nejsilnějších nástrojů v .NET, který umožňuje abstrakci komunikace mezi aplikacemi a databázemi prostřednictvím ORM (Object Relational Model). V nové verzi byly přidány další funkce, včetně podpory pro Azure Cosmos DB pro NoSQL a možnosti práce s AOT.

  • ASP.NET Core: Celá platforma ASP.NET Core prošla mnoha vylepšeními, včetně lepší podpory pro Blazor, SignalR, Minimal API, autentizaci a autorizaci a lepší podpory pro OpenAPI.

  • Swagger: Knihovna Swagger, známá pro generování dokumentace API, již nebude součástí výchozí šablony API v ASP.NET Core 9. To je způsobeno snahou snížit závislost na této knihovně a zlepšit podporu pro OpenAPI, což je jazykově neutrální a platformově nezávislý standard pro webová API.

Porovnání .NET a .NET Framework

.NET a .NET Framework mají mnoho společného – jsou to platformy, které nám umožňují vyvíjet skvélé řešení. .NET Framework (běžně nazývaný Full Framework) byl poprvé představen v únoru 2002 a přinesl nový model vývoje pomocí centralizované platformy. Umožňoval vývoj aplikací pro Windows a web prostřednictvím technologií, jako jsou Windows Forms, ASP.NET Web Forms, ASP.NET MVC a další.

Na rozdíl od .NET Framework, který byl závislý na operačním systému Windows a jeho API, byl .NET Core navržen tak, aby byl modulární a nezávislý na operačním systému. Tato nová verze .NET, nyní pouze jako .NET, je vyvíjena s podporou open-source komunity, přičemž celou platformu spravuje nezisková organizace .NET Foundation. Tento přístup otevřel nové možnosti pro vývojáře a umožnil rychlejší vydávání nových verzí frameworku s novými funkcemi a opravami.

Nové verze .NET platformy jsou vydávány každý rok v listopadu, a to ve formě verzí STS (Standard Term Support) v sudých letech, které mají podporu po dobu 18 měsíců, nebo LTS (Long Term Support) verzí v lichých letech, které mají tříletou podporu. Tato struktura umožňuje flexibilní přístup k aktualizacím a zjednodušuje proces udržování kompatibility mezi verzemi.

Příprava vývojového prostředí

Platforma .NET nabízí soubor nástrojů, které zajišťují nejlepší vývojářskou zkušenost bez ohledu na operační systém. Aplikace ASP.NET Core 9 mohou být vyvíjeny a spouštěny na operačních systémech Windows, Linux a macOS. Pro lepší pochopení konceptů ASP.NET Core budou v knize předkládány ukázky kódu, které usnadní implementaci a porozumění.

Jak efektivně registrovat vlastní middleware v ASP.NET Core 9

V ASP.NET Core 9 se middleware používá k přizpůsobení a rozšíření výchozího chování aplikace, ať už se jedná o manipulaci s požadavky, odpověďmi, nebo třeba správu chyb. Middleware je jakási součástí aplikačního pipeline, která může ovlivnit celý tok požadavků, než dojde k jejich zpracování samotnou aplikací. Tento způsob zpracování dat poskytuje výbornou flexibilitu, ale jak začneme přidávat více middleware, může být kód obtížně čitelný a údržba složitá.

V tomto článku se zaměříme na jednu z osvědčených metod, jak strukturovat a zjednodušit práci s middleware v ASP.NET Core 9 – použití rozšiřujících metod pro registraci middleware. Tato technika nejednoduší jen samotnou registraci, ale i celkovou organizaci projektu.

Představme si, že máme vlastní middleware, který slouží například k implementaci limitace požadavků, což je běžná praxe v aplikacích, které čelí velkému množství přístupů. V ASP.NET Core 9 je k dispozici middleware pro regulaci frekvence požadavků, které lze snadno přizpůsobit našim potřebám. Nicméně, když přidáme více takových middlewarů, může se nám kód rychle přetížit a stát se těžko čitelným. Řešením je využití rozšiřujících metod, které registrují middleware na jednom místě a pomohou nám udržet přehlednost.

Příklad efektivní registrace middleware v ASP.NET Core 9 vypadá následovně. Vytvoříme novou třídu s názvem CommonMiddlewareExtension.cs v adresáři middlewarů, která bude sloužit jako centrální místo pro registraci všech našich middlewarů. V této třídě vytvoříme rozšiřující metody, které umožní přidat middleware do HTTP pipeline aplikace.

csharp
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.RateLimiting; using System.Threading.RateLimiting; public static class CommonMiddlewareExtensions {
public static IServiceCollection AddCustomRateLimiting(this IServiceCollection services)
{ services.AddRateLimiter(options => { options.AddPolicy(
"fixed", context => RateLimitPartition.GetFixedWindowLimiter( new RateLimitPartitionKey(context.Request.Headers["X-Forwarded-For"].ToString(), PartitionKeyKind.ClientIP), partition => new FixedWindowRateLimiterOptions { PermitLimit = 5, Window = TimeSpan.FromMinutes(1), QueueProcessingOrder = QueueProcessingOrder.OldestFirst, QueueLimit = 2 } )); options.AddPolicy("sliding", context => RateLimitPartition.GetSlidingWindowLimiter( new RateLimitPartitionKey(context.Request.Headers["X-Forwarded-For"].ToString(), PartitionKeyKind.ClientIP), partition => new SlidingWindowRateLimiterOptions { PermitLimit = 5, Window = TimeSpan.FromMinutes(1), SegmentsPerWindow = 3, QueueProcessingOrder = QueueProcessingOrder.OldestFirst, QueueLimit = 2 } )); options.AddPolicy("tokenBucket", context => RateLimitPartition.GetTokenBucketLimiter( new RateLimitPartitionKey(context.Request.Headers["X-Forwarded-For"].ToString(), PartitionKeyKind.ClientIP), partition => new TokenBucketRateLimiterOptions { TokenLimit = 10, TokensPerPeriod = 5, ReplenishmentPeriod = TimeSpan.FromSeconds(10), QueueProcessingOrder = QueueProcessingOrder.OldestFirst, QueueLimit = 2 } )); }); return services; } public static void UseCommonApplicationMiddleware(this IApplicationBuilder app) { app.UseMiddleware<CustomMiddleware>(); app.UseMiddleware<AnotherCustomMiddleware>(); app.UseRateLimiter(); } }

Tato třída definuje metody, které nejenom přidávají politiku limitace požadavků, ale i zjednodušují celý proces konfigurace aplikace. Hlavní metodou je AddCustomRateLimiting, která vkládá naše vlastní politiky limitace do konfiguračního systému ASP.NET Core. Další metodou je UseCommonApplicationMiddleware, která ve výsledku přidá do aplikačního pipeline všechna potřebná middleware, včetně těch, které se týkají limitace požadavků.

V souboru Program.cs pak stačí použít tyto metody k registraci middleware:

csharp
var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddCustomRateLimiting(); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseCommonApplicationMiddleware(); app.MapRazorPages(); app.Run();

Tento přístup výrazně zjednodušuje údržbu aplikace. Namísto toho, abychom vkládali jednotlivé middleware přímo do souboru Program.cs, můžeme využít centralizovanou metodu, která všechno zařídí na jednom místě. Takovýto způsob organizace kódu je nejen přehlednější, ale také usnadňuje práci v týmu, kde každý ví, kde a jaký middleware je registrován.

Důležitým aspektem, který je nutné při práci s middleware chápat, je fakt, že správné nastavení pořadí middlewarů v pipeline může zásadně ovlivnit chování aplikace. Například middleware pro zpracování chyb by mělo být přidáno co nejdříve, zatímco middleware pro logování požadavků by mělo být umístěno na začátku, aby zachytilo všechny požadavky.

Kromě správného použití rozšiřujících metod pro registraci middleware, bychom měli vždy pečlivě zvažovat, jaké middleware používáme, a zda není lepší část z těchto logik delegovat na jiné vrstvy aplikace. Centralizace konfigurace, kterou rozšiřující metody poskytují, není všelékem, a i zde může být vhodné přizpůsobit konkrétní implementaci tak, aby se co nejlépe hodila k potřebám aplikace.

Jak efektivně spravovat konfigurace v aplikacích ASP.NET Core 9: Význam a praxe

V dynamickém světě webových aplikací je schopnost přizpůsobit se různým prostředím a požadavkům klíčová. Různé požadavky na bezpečnost, které se stávají stále důležitějšími v aplikacích běžících na různých cloudových poskytovatelích, musí být brány v úvahu, stejně jako správa konfigurací aplikace. Většina webových aplikací má nějaký způsob správy konfigurace, ať už ve formě souborů nebo tříd, aby centralizovaly parametry, které se používají v průběhu aplikace. S každou změnou konfigurace nebo chování aplikace je potřeba vygenerovat novou verzi softwaru. Při práci s vzdálenými týmy je kladeno důraz na správu konfigurací a citlivých dat, přičemž je nezbytné uchovávat tyto parametry mimo verze aplikace ve verzovacím systému. ASP.NET Core 9 poskytuje silné nástroje pro správu konfigurací aplikace a umožňuje využívat další funkce, například změnu chování aplikace bez nutnosti generovat nové verze softwaru.

Základem správy konfigurací v ASP.NET Core 9 je rozhraní IConfiguration, které nabízí sjednocený mechanismus pro správu nastavení a konfigurací aplikace. To umožňuje přístup k různým zdrojům konfigurace, jako jsou soubory JSON, proměnné prostředí nebo argumenty příkazového řádku. Hlavními koncepty tohoto rozhraní jsou:

  • Zdroje konfigurace: Podpora více zdrojů konfigurace, které mohou být kombinovány a vrstveny. Mezi běžné zdroje patří soubory JSON (např. appsettings.json), proměnné prostředí, argumenty příkazového řádku a uživatelské tajemství.

  • Hierarchická konfigurace: Konfigurace jsou organizovány v hierarchické struktuře, což znamená, že nastavení mohou být vnořena do sekcí, což usnadňuje správu komplexních konfigurací.

  • Pattern pro možnosti: Pattern pro možnosti používá IConfiguration k propojení nastavení konfigurace se silně typizovanými objekty.

Příklad správy připojení k databázi pomocí souboru appsettings.json v ASP.NET Core 9 ilustruje výhody tohoto přístupu. Použití IConfiguration pro získání hodnoty konfigurace prostřednictvím metody GetConnectionString ukazuje, jak snadno lze parametry načítat a spravovat. Tento přístup přináší několik výhod, jako je flexibilita při práci s různými prostředími (vývoj, testování, produkce), centralizovaná správa konfigurací a podpora prostředí-specifických nastavení.

V praxi se tato správa konfigurace realizuje následovně:

json
{ "ConnectionStrings": { "DefaultConnection": "Server=myServerAddress; Database=myDataBase;User Id=myUsername; Password=myPassword;" } }
csharp
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages(); string connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddDbContext(options => // options.UseSqlServer(connectionString)); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.Run();

Tento příklad ukazuje, jak jednoduše lze načíst hodnotu připojení k databázi z konfiguračního souboru appsettings.json pomocí IConfiguration. Cyklus života IConfiguration se synchronizuje s životním cyklem aplikace, což znamená, že všechny složitosti spojené se získáváním hodnot konfigurací prostřednictvím souborů nebo jiných zdrojů jsou abstrahovány a dostupné prostřednictvím rozhraní bez potřeby zásahů vývojářů.

Další výhodou je, že IConfiguration je k dispozici v kontejneru pro injekci závislostí (DIC), což znamená, že jej lze snadno používat v jakékoli třídě, která má závislosti dynamicky řešeny.

Kromě toho rozhraní IConfiguration poskytuje několik metod, které umožňují získat konfigurační data různými způsoby. Pro více informací je k dispozici rozsáhlá dokumentace Microsoftu, kde si lze prohlédnout podrobnosti o jednotlivých metodách a jejich použití.

Pro dosažení maximální flexibility při správě konfigurací, například v různých prostředích (vývoj, testování, produkce), je možné využít poskytovatele konfigurací, které umožňují získávání konfigurací z různých zdrojů, jako jsou soubory JSON, proměnné prostředí nebo příkazové řádky. Poskytovatelé konfigurací nabízejí robustní a bezpečný způsob správy nastavení aplikace, aniž by bylo nutné implementovat složité logiky pro nahrazování řetězců v konfiguračních souborech.

ASP.NET Core 9 nabízí integrované poskytovatele konfigurací, jako jsou:

  • Poskytovatel konfigurace pro JSON: Načítá data z JSON souborů, jako je appsettings.json.

  • Poskytovatel pro proměnné prostředí: Načítá konfiguraci z proměnných prostředí.

  • Poskytovatel pro příkazovou řádku: Načítá konfiguraci z argumentů příkazového řádku.

  • Poskytovatel pro paměť: Umožňuje přidat konfigurační data přímo do paměti, což je užitečné při jednotkových testech.

Použití těchto poskytovatelů umožňuje dynamickou správu konfigurací a přizpůsobení aplikace různým podmínkám bez nutnosti modifikovat samotné soubory aplikace. Například pomocí poskytovatele pro paměť lze do aplikace přidat konfigurační hodnoty, které jsou specifické pro konkrétní testovací scénáře, aniž by to ovlivnilo produkční prostředí.

ASP.NET Core 9 umožňuje bezproblémovou integraci s těmito poskytovateli prostřednictvím metody CreateBuilder, která vytváří objekt builderu aplikace, jenž definuje výchozí parametry pro aplikaci. Tento builder může být následně rozšířen o další poskytovatele konfigurací podle potřeby.

Chápání těchto principů správy konfigurace je zásadní pro efektivní vývoj moderních aplikací, které musí být schopné běžet v různých prostředích, a zároveň poskytovat silné záruky bezpečnosti a správnosti nastavení aplikace. Umožňuje to také snadnou údržbu aplikace, kde je možné měnit konfigurace bez nutnosti generování nových verzí softwaru, což je klíčové pro agilní vývoj a nasazení aplikací.