<%@ 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!
}
@foreach (var item in Model.Items)
{
- @item.Name - @item.Price Kč
}
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]]