Autoplay
Autocomplete
Previous Lesson
Complete and Continue
.NET Web API & Blazor WebAssembly Masterclass
Welcome!
Introduction (0:58)
Course Overview (5:06)
Accessing the Source Code for this Masterclass
GitHub Repository (1:49)
Let's get started!
Tools & SDKs (.NET Framework & Visual Studio) (1:44)
Heads Up: .NET 8 & .NET 9 (3:21)
Create Your First Project (4:31)
.NET 9: Program.cs & Testing the API with Scalar (6:37)
API Project Overview (7:09)
Test The Example API (8:50)
Heads-Up: Add a Class Library with .NET 8 & .NET 9 (0:42)
Create another project (already?!) (6:35)
Add your first model (4:59)
Add your first controller (5:55)
Write your first GET call (8:37)
Let’s store our code (1:40)
Store your code with Git & GitHub
Download & Install Git (2:10)
Create a GitHub account (3:31)
Create a repository with Visual Studio (9:14)
Check out your GitHub repository (4:15)
Implement all CRUD operations
GET, POST, What? - HTTP Request Methods (6:20)
Quiz: HTTP Request Methods
Model-View-... what pattern is this? (4:34)
Quiz: MVC & MVVM
Create a new entry (2:41)
Let’s create a feature branch - a what? (6:27)
Fat Controllers, the Repository Pattern & Dependency Injection (8:03)
Use the Repository Pattern & Dependency Injection (14:40)
Enhancing Flexibility with the Repository Pattern & Dependency Injection
Quiz: Repository Pattern & Dependency Injection
Introduce Data Transfer Objects (5:29)
Implement DTOs & the TimeEntryService (11:19)
Map Entities & Models with Mapster (5:21)
Quiz: Data Transfer Objects
Update an entity (14:04)
Delete an entity (3:59)
Get a single entity (7:24)
Merge the branches (3:18)
Publish to Azure & deploy with GitHub Actions
Push your changes first (1:17)
Create a (free) Azure account (1:28)
Create a Web App in Azure (Linux Config) (6:18)
Configure Deployment with Azure and GitHub Actions (6:03)
Enable Swagger for Production (5:43)
Azure Free & Shared Tier (1:58)
Add a Database & use Entity Framework
Install SQL Server, SQL Server Management Studio & Azure Data Studio (1:59)
About ORM, Entity Framework & Code-First Migrations (2:19)
Quiz: ORM, Entity Framework & Code-First Migrations
Install NuGet Packages & Create a new Feature Branch (3:35)
Install EF Core Tools (3:00)
Implement the DataContext (3:10)
Add Global Usings (5:23)
ConnectionString & Adding the DbContext (6:04)
First Migration (5:15)
About async & await (3:41)
Quiz: Asynchronous Calls
Change the POST Implementation (6:32)
Change the GET Implementations (4:39)
Change the PUT Implementation (5:36)
Change the DELETE Implementation (3:02)
Use a Custom Exception (when the Entity is null) (10:38)
Quiz: Throwing Exceptions vs. Returning Null
Improve performance with records & record structs (9:39)
Quiz: Records & Record Structs
Create a Database in Azure (6:41)
Configure Access to the Azure SQL Database (2:40)
Use a Migration Script (to create the table in the Azure DB) (6:09)
Important Notice: Preventing 500 Internal Server Errors in Azure
Push Changes & Deploy to Azure (5:46)
Troubleshooting: Fixing Access to the Azure SQL Database (3:54)
Relationships in Relational Databases
Create another Feature Branch (1:32)
Add the Project Model (3:03)
Work with Inheritance (3:01)
Add Migration & DbSet (17:00)
Types of Relationships (3:50)
One-to-One Relationship with ProjectDetails (6:04)
Many-to-Many Relationship with Users (6:23)
Fix the TimeEntry Implementations & Include Nested Objects (15:41)
Automatically Include Nested Objects (4:26)
Map the Project Details (6:57)
Exercise: Implement CRUD for Projects (2:08)
Solution: Implement CRUD for Projects (35:40)
Add Migration to Azure (8:06)
Push Changes & Deploy to Azure (3:37)
Quiz: Relationships & Entity Framework
Blazor WebAssembly
What the heck is Blazor WebAssembly? (3:58)
.NET 8/9: Add a Blazor WebAssembly Standalone App (1:14)
Add the Client Project (11:42)
.NET 8/9 vs .NET 7 Comparison (5:27)
Client Project Overview (7:02)
Create a New Page (4:03)
Get Data from our Web API (9:32)
Show Data on the New Page (10:50)
CSS Isolation for Styling (4:03)
Show Project Details (Parent to Child Communication with Parameters) (16:41)
Filter Time Entries by Projects (Child to Parent Communication with Event Callbacks) (15:01)
Component Communication with Services (14:50)
New Page to Create & Edit a Time Entry (11:42)
Introduce the EditForm (11:15)
Create the Project Service on the Client (3:18)
Use the Project Service (4:33)
Add a Project to a Time Entry (5:32)
Create a new Time Entry (5:08)
Add Validation to the EditForm (9:09)
Edit a Time Entry (2:04)
Delete a Time Entry (4:04)
Use the JSRuntime (3:10)
Implement a DataGrid with QuickGrid (11:53)
Filter Entries in a DataGrid (5:22)
Add Pagination to the DataGrid (1:59)
Exercise: Projects Implementation (1:39)
Solution: Projects Implementation (26:16)
Merge Branch & Publish to Azure (4:22)
Quiz: Blazor WebAssembly
Bonus: Remote Data with QuickGrid (21:27)
Authentication with ASP.NET Core Identity
Introduction to ASP.NET Core Identity (6:22)
Install Identity Packages (3:38)
Should You Split the Database? (7:18)
Change the DataContext & Models (2:43)
Register the Identity Services (3:24)
Add Migration & Update the Database (2:23)
Add a User Relationship (again) (10:26)
Add the Authentication Service for JSON Web Tokens (10:35)
Implement the User Registration Process (14:30)
Customize Identity Framework Configurations (4:37)
Implement the Login Process & Create a JSON Web Token (JWT) (14:27)
Secure Endpoints (3:17)
.NET 9: Test the Authentication with Scalar (5:13)
Add the JSON Web Token in Swagger UI (5:28)
Get User-Related Data Only (Introducing the HttpContext) (10:47)
Set the User Id when Creating a Time Entry (4:44)
Change the other Time Entry CRUD Operations (4:25)
Exercise: Project Implementations (0:33)
Solution: Project Implementations (8:57)
Merge & Publish to Azure (10:55)
Quiz: Authentication with Identity
Authentication with Blazor WebAssembly
The Easy Part: User Registration (11:14)
Add an AuthService on the Client (4:42)
Feedback with Toast Notifications (8:16)
Navigate to the Registration Page (2:29)
Create the Login Page (7:36)
Store the Token in the LocalStorage (4:35)
The AuthenticationStateProvider (it’s getting complex) (16:34)
Logout & The AuthorizeView Component with Friends (12:19)
Secure Pages with the Authorize Attribute (4:25)
Cleanup (6:00)
Quiz: Authentication with Blazor WebAssembly
Authorization with Roles
Utilize the IdentityRole (4:34)
Secure Everything with Roles (6:03)
Add Roles to the JSON Web Token (5:13)
Use the RoleManager to add Roles & Check Role Array in JWT (9:40)
Merge Branch & Publish to Azure (3:01)
Quiz: Authorization with Roles
Design with Tailwind CSS
Introduction (3:57)
Install & Configure Tailwind CSS (10:49)
Use Tailwind’s Utility Classes (7:20)
Create a new Layout File (4:43)
Create the Navigation Bar (9:10)
Change the LoginDisplay Component (4:23)
Change the Navigation Bar (5:01)
Fix the Mobile Menu (12:51)
Change the Login Form (8:09)
Build Custom Input Components (10:31)
Fix Login Error Messages (6:21)
Change the Register Page (16:53)
Create & Edit Time Entries (18:40)
Create & Edit Projects (5:17)
Time Entries Page (7:20)
Projects Page (1:24)
Minify CSS & Deploy to Azure (3:26)
Quiz: Tailwind CSS
Additional Features
Centered & Responsive Design (7:58)
Filter Time Entries by Day, Month & Year (10:21)
Switch Views with Tabs (17:25)
Add the TimeEntry Filters (10:30)
Show the Total Duration (7:52)
Charts with Radzen Blazor (21:56)
Conclusion
We're not done! (1:33)
Bonus Lectures
The Specification Pattern (25:38)
.NET 8/9 Blazor
Introduction (3:00)
.NET 8/9 Blazor Render Modes Explained (32:26)
What about pre-rendering? (8:37)
Update or Build from Scratch? (12:48)
Build the .NET 8/9 Time Tracker - First Steps (15:40)
Build the .NET 8/9 Time Tracker - Server Project (8:50)
Important: New @rendermode directive in .NET 8/9
Build the .NET 8/9 Time Tracker - Client Project (17:13)
Build the Time Tracking Application with .NET 8/9 - Discussing Prerendering & Authentication (9:30)
Build the .NET 8/9 Time Tracker - Implement Cookie-Based Authentication (26:53)
Build the .NET 8/9 Time Tracker - Finishing Up (8:27)
.NET 9 Update
Updating to .NET 9 (14:42)
Create Your First Project
Complete and Continue