2. ASP.NET Core Cốt lõi
Giới thiệu
Phần này trình bày các kiến thức cốt lõi về ASP.NET Core framework.
Nội dung chính
Khởi tạo ứng dụng
- Program.cs và Minimal APIs - So sánh Minimal APIs với Startup.cs truyền thống
Middleware
- Middleware là gì? - Khái niệm và cách hoạt động
- Thứ tự Middleware - Pipeline execution order
- Custom Middleware - Cách viết Middleware tùy chỉnh
Dependency Injection
- 3 loại Lifecycle - Singleton, Scoped, Transient
- Ví dụ thực tế - Khi nào dùng loại nào?
- Scoped vào Singleton - Vì sao không nên?
Routing
- Conventional Routing - MVC routing
- Attribute Routing - Web API routing
Filters
- Các loại Filter - Authorization, Resource, Action, Exception, Result
- So sánh với Middleware - Khi nào dùng filter?
Cấu hình & Logging
- appsettings.json - Configuration
- IOptions Pattern - Options pattern
- Serilog - Logging tối ưu
Xử lý lỗi
- Global Error Handling - UseExceptionHandler, UseStatusCodePages
- ProblemDetails (RFC 7807) - Standard error response
- Custom Exception Filter - IExceptionHandler implementation
- Error Handling trong Minimal APIs - TypedResults
Model Binding
- Binding Sources - FromBody, FromQuery, FromRoute, FromHeader, FromForm
- Binding Order - Thứ tự ưu tiên
- Custom Model Binding - Custom binders và providers
- Binding trong Minimal APIs - Parameter binding
Model Validation
- Data Annotations - Built-in validation attributes
- Custom Validation Attribute - Tạo custom attributes
- IValidatableObject - Self-validating models
- FluentValidation - Fluent validation library
- Validation trong Minimal APIs - Validation pattern
ActionResult Types
- IActionResult - Common action results
- ActionResult
- Generic action results - TypedResults (Minimal APIs) - Type-safe results
- Custom ActionResult - Custom result classes
Static Files & File Handling
- Serving Static Files - wwwroot, UseStaticFiles
- File Providers - Physical, Embedded, Composite
- Cache Headers - Caching static files
- File Upload - IFormFile, streaming uploads
- File Download - File results, streaming downloads
- AWS S3 Operations - Upload, download, delete files in S3
Background Tasks
- IHostedService - Background service interface
- BackgroundService - Abstract base class
- Scheduled Tasks - Cron-based scheduling
- Worker Service Template - Creating worker services
Health Checks
- Basic Health Checks - Setup and configuration
- Custom Health Checks - IHealthCheck implementation
- Health Check UI - Visual health monitoring
- Kubernetes Probes - Liveness, Readiness, Startup
Minimal APIs Advanced
- Route Groups - Grouping routes (.NET 7+)
- Endpoint Filters - Filter pipeline
- Parameter Binding - Advanced binding
- Organizing Large APIs - Best practices
Content Negotiation
- Input Formatters - JSON, XML, custom formatters
- Output Formatters - Response formatting
- JSON Configuration - Serializer options
- Custom Formatters - CSV, etc.
Output Caching
- Output Caching vs Response Caching - Server vs client caching
- Cache Policies - Policy configuration
- Cache Tags - Tag-based invalidation
- Vary By - Query, Header, Route variation
Rate Limiting
- Rate Limiting - Giới hạn requests per IP/user
- Cấu hình - AspNetCoreRateLimit setup
- Endpoint Rate Limiting - Per-action rate limiting
Kestrel Configuration
- Endpoint Configuration - HTTP, HTTPS, Unix sockets
- HTTPS Configuration - Certificates, redirection
- Request Limits - Body size, headers, timeouts
- HTTP/2 & HTTP/3 - Protocol configuration
- Reverse Proxy - When to use
Localization (i18n)
- Resource Files - .resx files structure
- IStringLocalizer - Using localizers
- View Localization - Localizing Razor views
- Data Annotations Localization - Localized validation
- Culture Providers - Query, Cookie, Header, Route
Real-time Communication
- SignalR Basics - Hub, client-server communication
- Groups & Users - Targeted messaging
- Strongly-typed Hubs - Interface-based hubs
- Scaling with Redis - Backplane configuration
gRPC
- gRPC vs REST - When to use gRPC
- Protocol Buffers - .proto files
- Streaming - Server, Client, Bidirectional
- gRPC Client - Client setup and usage
- Interceptors - Logging, error handling