====== ASP.NET ====== **ASP.NET** je open-source webový framework vyvinutý společností Microsoft pro tvorbu moderních webových aplikací a služeb. Je postaven na [[.NET Framework|.NET Frameworku]] a umožňuje vývojářům vytvářet dynamické webové stránky, webové aplikace a RESTful API. ===== Historie a vývoj ===== ASP.NET je nástupcem klasické technologie **ASP (Active Server Pages)**: * **ASP.NET 1.0** (2002) – první verze jako součást .NET Frameworku 1.0 * **ASP.NET 2.0** (2005) – master pages, membership systém * **ASP.NET 3.5** (2007) – zavedení ASP.NET MVC jako alternativa k Web Forms * **ASP.NET 4.x** (2010-2015) – vylepšení výkonu, async/await * **ASP.NET Core** (2016+) – kompletně přepsaný, multiplatformní framework ===== Hlavní technologie ASP.NET ===== ASP.NET nabízí několik různých přístupů k vývoji webových aplikací: ==== ASP.NET Web Forms ==== Tradiční model vývoje podobný desktop aplikacím: * **Event-driven** programovací model * **Drag-and-drop** ovládací prvky ve Visual Studiu * **ViewState** – automatická správa stavu * **Server controls** – tlačítka, textboxy atd. s událostmi * Vhodné pro rychlý vývoj aplikací s formuláři <%@ Page Language="C#" %> Příklad Web Forms
==== ASP.NET MVC ==== Model-View-Controller pattern pro lepší separaci logiky: * **Model** – datové objekty a business logika * **View** – prezentační vrstva (Razor syntax) * **Controller** – zpracování požadavků a koordinace * Plná kontrola nad HTML výstupem * Lepší testovatelnost kódu * RESTful routing // Controller public class HomeController : Controller { public IActionResult Index() { var model = new HomeViewModel { Message = "Vítejte v ASP.NET MVC!" }; return View(model); } } @* View (Razor) *@ @model HomeViewModel

@Model.Message

Toto je stránka vytvořená v ASP.NET MVC.

==== ASP.NET Web API ==== Framework pro tvorbu RESTful webových služeb: * Vytváření HTTP služeb dostupných pro různé klienty * Automatická serializace do JSON/XML * Podpora pro content negotiation * RESTful routing [ApiController] [Route("api/[controller]")] public class ProductsController : ControllerBase { [HttpGet] public IEnumerable GetAll() { return _repository.GetAllProducts(); } [HttpGet("{id}")] public ActionResult GetById(int id) { var product = _repository.GetProduct(id); if (product == null) return NotFound(); return product; } [HttpPost] public ActionResult Create(Product product) { _repository.AddProduct(product); return CreatedAtAction(nameof(GetById), new { id = product.Id }, product); } } ==== ASP.NET Web Pages ==== Zjednodušený model pro menší webové projekty: * Kombinace HTML a kódu v jednom souboru * Razor syntax pro vkládání C# kódu * Jednodušší než Web Forms nebo MVC * Vhodné pro jednoduché weby a prototypy ===== Razor syntaxe ===== **Razor** je šablonovací engine pro ASP.NET: @{ var jmeno = "Jan"; var cas = DateTime.Now; }

Ahoj, @jmeno!

Aktuální čas: @cas.ToString("HH:mm:ss")

@if (cas.Hour < 12) {

Dobré ráno!

} else {

Dobrý den!

}
Klíčové vlastnosti Razor: * Symbol `@` pro přechod mezi HTML a C# kódem * IntelliSense podpora ve Visual Studiu * Automatické HTML kódování (ochrana proti XSS) * Čistá a čitelná syntaxe ===== Klíčové funkce ASP.NET ===== ==== Správa stavu ==== ASP.NET poskytuje několik mechanismů pro ukládání stavu: * **ViewState** – stav mezi postbacky (Web Forms) * **Session** – data specifická pro uživatele * **Application** – data sdílená mezi všemi uživateli * **Cache** – dočasné uložení dat pro výkon * **Cookies** – data na straně klienta * **TempData** – dočasná data mezi požadavky (MVC) ==== Autentizace a autorizace ==== Integrované bezpečnostní funkce: * **ASP.NET Identity** – správa uživatelů a rolí * **Windows Authentication** – integrace s Active Directory * **Forms Authentication** – vlastní přihlašovací formuláře * **OAuth/OpenID Connect** – integrace s externími poskytovateli * **JWT tokens** – pro API autentizaci [Authorize(Roles = "Admin")] public class AdminController : Controller { public IActionResult Dashboard() { return View(); } } ==== Validace dat ==== Podpora pro validaci vstupních dat: public class RegisterViewModel { [Required(ErrorMessage = "Email je povinný")] [EmailAddress(ErrorMessage = "Neplatný email")] public string Email { get; set; } [Required] [StringLength(100, MinimumLength = 6)] [DataType(DataType.Password)] public string Password { get; set; } [Compare("Password", ErrorMessage = "Hesla se neshodují")] public string ConfirmPassword { get; set; } } ===== ASP.NET Core ===== Moderní, multiplatformní verze ASP.NET: * **Cross-platform** – běží na Windows, Linux, macOS * **Open-source** – vyvíjeno veřejně na GitHubu * **Vysoký výkon** – jeden z nejrychlejších webových frameworků * **Modulární** – používáte jen co potřebujete * **Cloud-ready** – optimalizováno pro kontejnery a cloud * **Unified** – sloučení MVC a Web API do jednoho frameworku Hlavní rozdíly oproti klasickému ASP.NET: ^ Klasický ASP.NET ^ ASP.NET Core ^ | Pouze Windows | Windows, Linux, macOS | | Závislost na IIS | Samostatný webový server (Kestrel) | | System.Web.dll | Modulární balíčky | | Web.config | appsettings.json + kód | | Těžký framework | Lehký a rychlý | // Program.cs v ASP.NET Core var builder = WebApplication.CreateBuilder(args); // Přidání služeb builder.Services.AddControllersWithViews(); builder.Services.AddDbContext(); var app = builder.Build(); // Konfigurace HTTP pipeline app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run(); ===== Deployment a hosting ===== ASP.NET aplikace lze nasadit různými způsoby: * **IIS (Internet Information Services)** – tradiční hosting na Windows Server * **Azure App Service** – cloud hosting od Microsoftu * **Docker kontejnery** – pro ASP.NET Core * **Linux servery** – s Nginx nebo Apache (ASP.NET Core) * **Self-hosted** – vlastní konzolová aplikace s webovým serverem ===== Výhody ASP.NET ===== * **Integrace s .NET** – přístup ke všem knihovnám .NET ekosystému * **Výkonnost** – kompilovaný kód, caching, async operace * **Bezpečnost** – integrované ochrany proti CSRF, XSS, SQL injection * **Škálovatelnost** – podpora pro load balancing a distribuované aplikace * **Vývojářské nástroje** – vynikající podpora ve [[Visual Studio]] * **Komunita** – rozsáhlá dokumentace a aktivní komunita * **IntelliSense** – automatické dokončování kódu * **NuGet** – tisíce dostupných balíčků ===== Databázový přístup ===== ASP.NET podporuje různé způsoby práce s databázemi: * **ADO.NET** – nízkoúrovňový přístup k databázím * **Entity Framework** – ORM (Object-Relational Mapping) * **Dapper** – lehký micro-ORM * **LINQ to SQL** – dotazy pomocí LINQ syntaxe // Entity Framework příklad public class ApplicationDbContext : DbContext { public DbSet Products { get; set; } public DbSet Orders { get; set; } } // Použití v controlleru public class ProductsController : Controller { private readonly ApplicationDbContext _context; public ProductsController(ApplicationDbContext context) { _context = context; } public async Task Index() { var products = await _context.Products .Where(p => p.IsActive) .OrderBy(p => p.Name) .ToListAsync(); return View(products); } } ===== SignalR ===== **ASP.NET SignalR** – knihovna pro real-time webové aplikace: * **WebSockets** podpora * Automatický fallback na jiné technologie (long polling, server-sent events) * Obousměrná komunikace mezi serverem a klientem * Vhodné pro chaty, notifikace, dashboardy public class ChatHub : Hub { public async Task SendMessage(string user, string message) { await Clients.All.SendAsync("ReceiveMessage", user, message); } } ===== Blazor ===== **Blazor** – framework pro tvorbu interaktivních webových UI s [[CSharp|C#]]: * **Blazor Server** – UI logika běží na serveru * **Blazor WebAssembly** – C# kód běží přímo v prohlížeči * Sdílení kódu mezi klientem a serverem * Komponenty napsané v C# místo JavaScriptu @page "/counter"

Counter

Počet: @currentCount

@code { private int currentCount = 0; private void IncrementCount() { currentCount++; } }
===== Middleware Pipeline ===== ASP.NET Core používá middleware pipeline pro zpracování požadavků: app.Use(async (context, next) => { // Kód před dalším middleware await next.Invoke(); // Kód po dalším middleware }); app.UseAuthentication(); app.UseAuthorization(); app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); ===== Výkon a optimalizace ===== Techniky pro optimalizaci ASP.NET aplikací: * **Output caching** – cache celých stránek nebo částí * **Response compression** – komprese HTTP odpovědí * **Bundling a minification** – spojení a minimalizace CSS/JS * **CDN** – distribuce statických souborů * **Async/await** – asynchronní operace pro lepší škálovatelnost * **Connection pooling** – opakované použití databázových připojení ===== Související pojmy ===== * [[.NET Framework]] – základní platforma * [[.NET Core]] – multiplatformní verze * [[CLR]] – běhové prostředí * [[CSharp]] – primární programovací jazyk * [[IIS]] – Internet Information Services * [[Visual Studio]] – vývojové prostředí * [[Entity Framework]] – ORM framework * [[NuGet]] – správce balíčků * [[Razor]] – view engine * [[MVC]] – architektonický vzor ===== Externí odkazy ===== * [[https://dotnet.microsoft.com/apps/aspnet|Oficiální stránky ASP.NET]] * [[https://learn.microsoft.com/cs-cz/aspnet/core/|ASP.NET Core dokumentace]] * [[https://github.com/dotnet/aspnetcore|ASP.NET Core na GitHubu]] * [[https://www.asp.net/|ASP.NET komunita]]