├── Chapter03
└── MyBlog
│ ├── Data.Tests
│ ├── GlobalUsings.cs
│ └── Data
│ │ ├── Tags
│ │ ├── 0b6df322-5dee-4901-90a1-bf07e4e0de01.json
│ │ ├── d568c4ab-2130-4caf-a653-95176c909c07.json
│ │ └── fa29eec2-495a-4441-8968-5e9d6310688f.json
│ │ ├── Categories
│ │ ├── bebb96a0-3110-4f46-a59d-b99bc3b531e6.json
│ │ ├── edf7eda7-1f58-4e89-b9d0-18cdf596bd91.json
│ │ └── fc5fa554-4333-4bae-846a-36e0a975d321.json
│ │ ├── Comments
│ │ ├── db97df73-65ce-4921-acdd-35e3f08752ab.json
│ │ └── fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json
│ │ └── Blogposts
│ │ ├── 311e92e9-36e4-45dc-8822-1935deb0231e.json
│ │ └── 9618318e-9df8-41f9-8148-27d677e269cc.json
│ ├── RavenDb
│ └── Data.Tests
│ │ ├── GlobalUsings.cs
│ │ └── Data
│ │ ├── Tags
│ │ ├── 0b6df322-5dee-4901-90a1-bf07e4e0de01.json
│ │ ├── d568c4ab-2130-4caf-a653-95176c909c07.json
│ │ └── fa29eec2-495a-4441-8968-5e9d6310688f.json
│ │ ├── Categories
│ │ ├── bebb96a0-3110-4f46-a59d-b99bc3b531e6.json
│ │ ├── edf7eda7-1f58-4e89-b9d0-18cdf596bd91.json
│ │ └── fc5fa554-4333-4bae-846a-36e0a975d321.json
│ │ ├── Comments
│ │ ├── fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json
│ │ └── db97df73-65ce-4921-acdd-35e3f08752ab.json
│ │ └── Blogposts
│ │ ├── 311e92e9-36e4-45dc-8822-1935deb0231e.json
│ │ └── 9618318e-9df8-41f9-8148-27d677e269cc.json
│ ├── EntityFramework
│ ├── Data.Tests
│ │ ├── GlobalUsings.cs
│ │ └── Data
│ │ │ ├── Tags
│ │ │ ├── 0b6df322-5dee-4901-90a1-bf07e4e0de01.json
│ │ │ ├── d568c4ab-2130-4caf-a653-95176c909c07.json
│ │ │ └── fa29eec2-495a-4441-8968-5e9d6310688f.json
│ │ │ ├── Categories
│ │ │ ├── bebb96a0-3110-4f46-a59d-b99bc3b531e6.json
│ │ │ ├── edf7eda7-1f58-4e89-b9d0-18cdf596bd91.json
│ │ │ └── fc5fa554-4333-4bae-846a-36e0a975d321.json
│ │ │ ├── Comments
│ │ │ ├── db97df73-65ce-4921-acdd-35e3f08752ab.json
│ │ │ └── fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json
│ │ │ └── Blogposts
│ │ │ ├── 311e92e9-36e4-45dc-8822-1935deb0231e.json
│ │ │ └── 9618318e-9df8-41f9-8148-27d677e269cc.json
│ └── Data
│ │ └── Nuget.config
│ ├── BlazorWebApp
│ ├── BlazorWebApp
│ │ ├── wwwroot
│ │ │ └── favicon.png
│ │ ├── Components
│ │ │ ├── Pages
│ │ │ │ └── Home.razor
│ │ │ └── Routes.razor
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ └── BlazorWebApp.Client
│ │ ├── wwwroot
│ │ ├── appsettings.json
│ │ └── appsettings.Development.json
│ │ ├── Program.cs
│ │ └── _Imports.razor
│ ├── Data.Models
│ ├── Tag.cs
│ ├── Category.cs
│ ├── Data.Models.csproj
│ ├── Comment.cs
│ └── BlogPost.cs
│ └── Data
│ └── BlogApiJsonDirectAccessSetting.cs
├── Chapter04
└── MyBlog
│ ├── Data.Tests
│ ├── GlobalUsings.cs
│ └── Data
│ │ ├── Tags
│ │ ├── 0b6df322-5dee-4901-90a1-bf07e4e0de01.json
│ │ ├── d568c4ab-2130-4caf-a653-95176c909c07.json
│ │ └── fa29eec2-495a-4441-8968-5e9d6310688f.json
│ │ ├── Categories
│ │ ├── bebb96a0-3110-4f46-a59d-b99bc3b531e6.json
│ │ ├── edf7eda7-1f58-4e89-b9d0-18cdf596bd91.json
│ │ └── fc5fa554-4333-4bae-846a-36e0a975d321.json
│ │ ├── Comments
│ │ ├── db97df73-65ce-4921-acdd-35e3f08752ab.json
│ │ └── fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json
│ │ └── Blogposts
│ │ ├── 311e92e9-36e4-45dc-8822-1935deb0231e.json
│ │ └── 9618318e-9df8-41f9-8148-27d677e269cc.json
│ ├── SharedComponents
│ ├── wwwroot
│ │ ├── background.png
│ │ └── exampleJsInterop.js
│ ├── Nuget.config
│ └── _Imports.razor
│ ├── BlazorWebApp
│ ├── BlazorWebApp
│ │ ├── wwwroot
│ │ │ └── favicon.png
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.json
│ │ └── Components
│ │ │ ├── Routes.razor
│ │ │ └── _Imports.razor
│ └── BlazorWebApp.Client
│ │ ├── wwwroot
│ │ ├── appsettings.json
│ │ └── appsettings.Development.json
│ │ ├── Program.cs
│ │ └── _Imports.razor
│ ├── Data.Models
│ ├── Tag.cs
│ ├── Category.cs
│ ├── Data.Models.csproj
│ ├── Comment.cs
│ └── BlogPost.cs
│ └── Data
│ └── BlogApiJsonDirectAccessSetting.cs
├── Chapter05
└── MyBlog
│ ├── Data.Tests
│ ├── GlobalUsings.cs
│ └── Data
│ │ ├── Tags
│ │ ├── 0b6df322-5dee-4901-90a1-bf07e4e0de01.json
│ │ ├── d568c4ab-2130-4caf-a653-95176c909c07.json
│ │ └── fa29eec2-495a-4441-8968-5e9d6310688f.json
│ │ ├── Categories
│ │ ├── bebb96a0-3110-4f46-a59d-b99bc3b531e6.json
│ │ ├── edf7eda7-1f58-4e89-b9d0-18cdf596bd91.json
│ │ └── fc5fa554-4333-4bae-846a-36e0a975d321.json
│ │ ├── Comments
│ │ ├── db97df73-65ce-4921-acdd-35e3f08752ab.json
│ │ └── fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json
│ │ └── Blogposts
│ │ ├── 311e92e9-36e4-45dc-8822-1935deb0231e.json
│ │ └── 9618318e-9df8-41f9-8148-27d677e269cc.json
│ ├── SharedComponents
│ ├── ErrorBoundaryDemo
│ │ ├── ErrorBoundaryDemo.razor
│ │ ├── ComponentWithError.razor
│ │ └── CustomErrorBoundaryDemo.razor
│ ├── wwwroot
│ │ ├── background.png
│ │ └── exampleJsInterop.js
│ ├── Pages
│ │ ├── SetFocus.razor
│ │ ├── RenderFragmentTest.razor
│ │ ├── ErrorBoundaryTest.razor
│ │ └── AlertTest.razor
│ ├── Nuget.config
│ └── _Imports.razor
│ ├── BlazorWebApp
│ ├── BlazorWebApp
│ │ ├── wwwroot
│ │ │ └── favicon.png
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.json
│ │ └── Components
│ │ │ ├── ParentCounter.razor
│ │ │ └── Routes.razor
│ └── BlazorWebApp.Client
│ │ ├── wwwroot
│ │ ├── appsettings.json
│ │ └── appsettings.Development.json
│ │ ├── Program.cs
│ │ └── _Imports.razor
│ ├── Data.Models
│ ├── Tag.cs
│ ├── Category.cs
│ ├── Data.Models.csproj
│ ├── Comment.cs
│ └── BlogPost.cs
│ └── Data
│ └── BlogApiJsonDirectAccessSetting.cs
├── Chapter06
└── MyBlog
│ ├── Data.Tests
│ ├── GlobalUsings.cs
│ └── Data
│ │ ├── Tags
│ │ ├── 0b6df322-5dee-4901-90a1-bf07e4e0de01.json
│ │ ├── d568c4ab-2130-4caf-a653-95176c909c07.json
│ │ └── fa29eec2-495a-4441-8968-5e9d6310688f.json
│ │ ├── Categories
│ │ ├── bebb96a0-3110-4f46-a59d-b99bc3b531e6.json
│ │ ├── edf7eda7-1f58-4e89-b9d0-18cdf596bd91.json
│ │ └── fc5fa554-4333-4bae-846a-36e0a975d321.json
│ │ ├── Comments
│ │ ├── db97df73-65ce-4921-acdd-35e3f08752ab.json
│ │ └── fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json
│ │ └── Blogposts
│ │ ├── 311e92e9-36e4-45dc-8822-1935deb0231e.json
│ │ └── 9618318e-9df8-41f9-8148-27d677e269cc.json
│ ├── SharedComponents
│ ├── ErrorBoundaryDemo
│ │ ├── ErrorBoundaryDemo.razor
│ │ ├── ComponentWithError.razor
│ │ └── CustomErrorBoundaryDemo.razor
│ ├── wwwroot
│ │ ├── background.png
│ │ └── exampleJsInterop.js
│ ├── Pages
│ │ ├── SetFocus.razor
│ │ ├── RenderFragmentTest.razor
│ │ ├── ErrorBoundaryTest.razor
│ │ └── AlertTest.razor
│ └── Nuget.config
│ ├── BlazorWebApp
│ ├── BlazorWebApp
│ │ ├── wwwroot
│ │ │ └── favicon.png
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.json
│ │ └── Components
│ │ │ ├── ParentCounter.razor
│ │ │ └── Routes.razor
│ └── BlazorWebApp.Client
│ │ ├── Program.cs
│ │ ├── wwwroot
│ │ ├── appsettings.json
│ │ └── appsettings.Development.json
│ │ └── _Imports.razor
│ ├── Data.Models
│ ├── Tag.cs
│ ├── Category.cs
│ └── Data.Models.csproj
│ └── Data
│ └── BlogApiJsonDirectAccessSetting.cs
├── Chapter07
└── MyBlog
│ ├── Data.Tests
│ ├── GlobalUsings.cs
│ └── Data
│ │ ├── Tags
│ │ ├── 0b6df322-5dee-4901-90a1-bf07e4e0de01.json
│ │ ├── d568c4ab-2130-4caf-a653-95176c909c07.json
│ │ └── fa29eec2-495a-4441-8968-5e9d6310688f.json
│ │ ├── Categories
│ │ ├── bebb96a0-3110-4f46-a59d-b99bc3b531e6.json
│ │ ├── edf7eda7-1f58-4e89-b9d0-18cdf596bd91.json
│ │ └── fc5fa554-4333-4bae-846a-36e0a975d321.json
│ │ ├── Comments
│ │ ├── db97df73-65ce-4921-acdd-35e3f08752ab.json
│ │ └── fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json
│ │ └── Blogposts
│ │ ├── 311e92e9-36e4-45dc-8822-1935deb0231e.json
│ │ └── 9618318e-9df8-41f9-8148-27d677e269cc.json
│ ├── SharedComponents
│ ├── ErrorBoundaryDemo
│ │ ├── ErrorBoundaryDemo.razor
│ │ ├── ComponentWithError.razor
│ │ └── CustomErrorBoundaryDemo.razor
│ ├── wwwroot
│ │ ├── background.png
│ │ └── exampleJsInterop.js
│ ├── Pages
│ │ ├── SetFocus.razor
│ │ ├── RenderFragmentTest.razor
│ │ ├── ErrorBoundaryTest.razor
│ │ └── AlertTest.razor
│ └── Nuget.config
│ ├── BlazorWebApp
│ ├── BlazorWebApp
│ │ ├── wwwroot
│ │ │ └── favicon.png
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.json
│ │ └── Components
│ │ │ ├── ParentCounter.razor
│ │ │ └── Routes.razor
│ └── BlazorWebApp.Client
│ │ ├── Program.cs
│ │ ├── wwwroot
│ │ ├── appsettings.json
│ │ └── appsettings.Development.json
│ │ └── _Imports.razor
│ ├── Data.Models
│ ├── Tag.cs
│ ├── Category.cs
│ └── Data.Models.csproj
│ └── Data
│ └── BlogApiJsonDirectAccessSetting.cs
├── Chapter08
└── MyBlog
│ ├── Data.Tests
│ ├── GlobalUsings.cs
│ └── Data
│ │ ├── Tags
│ │ ├── 0b6df322-5dee-4901-90a1-bf07e4e0de01.json
│ │ ├── d568c4ab-2130-4caf-a653-95176c909c07.json
│ │ └── fa29eec2-495a-4441-8968-5e9d6310688f.json
│ │ ├── Categories
│ │ ├── bebb96a0-3110-4f46-a59d-b99bc3b531e6.json
│ │ ├── edf7eda7-1f58-4e89-b9d0-18cdf596bd91.json
│ │ └── fc5fa554-4333-4bae-846a-36e0a975d321.json
│ │ ├── Comments
│ │ ├── db97df73-65ce-4921-acdd-35e3f08752ab.json
│ │ └── fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json
│ │ └── Blogposts
│ │ ├── 311e92e9-36e4-45dc-8822-1935deb0231e.json
│ │ └── 9618318e-9df8-41f9-8148-27d677e269cc.json
│ ├── SharedComponents
│ ├── ErrorBoundaryDemo
│ │ ├── ErrorBoundaryDemo.razor
│ │ ├── ComponentWithError.razor
│ │ └── CustomErrorBoundaryDemo.razor
│ ├── wwwroot
│ │ ├── background.png
│ │ └── exampleJsInterop.js
│ ├── Pages
│ │ ├── SetFocus.razor
│ │ ├── RenderFragmentTest.razor
│ │ ├── ErrorBoundaryTest.razor
│ │ └── AlertTest.razor
│ └── Nuget.config
│ ├── BlazorWebApp
│ ├── BlazorWebApp
│ │ ├── wwwroot
│ │ │ └── favicon.png
│ │ ├── appsettings.Development.json
│ │ ├── Components
│ │ │ ├── LoginStatus.razor
│ │ │ └── ParentCounter.razor
│ │ └── appsettings.json
│ └── BlazorWebApp.Client
│ │ ├── wwwroot
│ │ ├── appsettings.json
│ │ └── appsettings.Development.json
│ │ └── UserInfo.cs
│ ├── Data.Models
│ ├── Tag.cs
│ ├── Category.cs
│ └── Data.Models.csproj
│ └── Data
│ └── BlogApiJsonDirectAccessSetting.cs
├── Chapter09
└── MyBlog
│ ├── Data.Tests
│ ├── GlobalUsings.cs
│ └── Data
│ │ ├── Tags
│ │ ├── 0b6df322-5dee-4901-90a1-bf07e4e0de01.json
│ │ ├── d568c4ab-2130-4caf-a653-95176c909c07.json
│ │ └── fa29eec2-495a-4441-8968-5e9d6310688f.json
│ │ ├── Categories
│ │ ├── bebb96a0-3110-4f46-a59d-b99bc3b531e6.json
│ │ ├── edf7eda7-1f58-4e89-b9d0-18cdf596bd91.json
│ │ └── fc5fa554-4333-4bae-846a-36e0a975d321.json
│ │ ├── Comments
│ │ ├── db97df73-65ce-4921-acdd-35e3f08752ab.json
│ │ └── fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json
│ │ └── Blogposts
│ │ ├── 311e92e9-36e4-45dc-8822-1935deb0231e.json
│ │ └── 9618318e-9df8-41f9-8148-27d677e269cc.json
│ ├── SharedComponents
│ ├── ErrorBoundaryDemo
│ │ ├── ErrorBoundaryDemo.razor
│ │ ├── ComponentWithError.razor
│ │ └── CustomErrorBoundaryDemo.razor
│ ├── wwwroot
│ │ ├── background.png
│ │ └── exampleJsInterop.js
│ ├── Pages
│ │ ├── SetFocus.razor
│ │ ├── RenderFragmentTest.razor
│ │ ├── ErrorBoundaryTest.razor
│ │ └── AlertTest.razor
│ └── Nuget.config
│ ├── BlazorWebApp
│ ├── BlazorWebApp
│ │ ├── wwwroot
│ │ │ └── favicon.png
│ │ ├── appsettings.Development.json
│ │ ├── Components
│ │ │ ├── LoginStatus.razor
│ │ │ └── ParentCounter.razor
│ │ └── appsettings.json
│ └── BlazorWebApp.Client
│ │ └── wwwroot
│ │ ├── appsettings.json
│ │ └── appsettings.Development.json
│ ├── Data.Models
│ ├── Tag.cs
│ ├── Category.cs
│ └── Data.Models.csproj
│ └── Data
│ └── BlogApiJsonDirectAccessSetting.cs
├── Chapter10
└── MyBlog
│ ├── Data.Tests
│ ├── GlobalUsings.cs
│ └── Data
│ │ ├── Tags
│ │ ├── 0b6df322-5dee-4901-90a1-bf07e4e0de01.json
│ │ ├── d568c4ab-2130-4caf-a653-95176c909c07.json
│ │ └── fa29eec2-495a-4441-8968-5e9d6310688f.json
│ │ ├── Categories
│ │ ├── bebb96a0-3110-4f46-a59d-b99bc3b531e6.json
│ │ ├── edf7eda7-1f58-4e89-b9d0-18cdf596bd91.json
│ │ └── fc5fa554-4333-4bae-846a-36e0a975d321.json
│ │ ├── Comments
│ │ ├── db97df73-65ce-4921-acdd-35e3f08752ab.json
│ │ └── fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json
│ │ └── Blogposts
│ │ ├── 311e92e9-36e4-45dc-8822-1935deb0231e.json
│ │ └── 9618318e-9df8-41f9-8148-27d677e269cc.json
│ ├── SharedComponents
│ ├── Demo
│ │ ├── JSInteropSamples
│ │ │ ├── NetToJS.razor.js
│ │ │ ├── JSToReferenceNET.razor.js
│ │ │ └── JSToStaticNET.razor.js
│ │ ├── JSInteropSamplesWasm
│ │ │ ├── NetToJS.razor.js
│ │ │ └── NetToJS.razor.cs
│ │ └── HighChart.razor.js
│ ├── ReusableComponents
│ │ └── BlogButton.razor.js
│ ├── ErrorBoundaryDemo
│ │ ├── ErrorBoundaryDemo.razor
│ │ ├── ComponentWithError.razor
│ │ └── CustomErrorBoundaryDemo.razor
│ ├── wwwroot
│ │ ├── background.png
│ │ └── exampleJsInterop.js
│ ├── Pages
│ │ ├── SetFocus.razor
│ │ ├── RenderFragmentTest.razor
│ │ ├── ErrorBoundaryTest.razor
│ │ └── AlertTest.razor
│ └── Nuget.config
│ ├── BlazorWebApp
│ ├── BlazorWebApp
│ │ ├── wwwroot
│ │ │ └── favicon.png
│ │ ├── appsettings.Development.json
│ │ ├── Components
│ │ │ ├── LoginStatus.razor
│ │ │ └── ParentCounter.razor
│ │ └── appsettings.json
│ └── BlazorWebApp.Client
│ │ ├── wwwroot
│ │ ├── appsettings.json
│ │ └── appsettings.Development.json
│ │ └── UserInfo.cs
│ ├── Data.Models
│ ├── Tag.cs
│ ├── Category.cs
│ └── Data.Models.csproj
│ └── Data
│ └── BlogApiJsonDirectAccessSetting.cs
├── Chapter11
└── MyBlog
│ ├── Data.Tests
│ ├── GlobalUsings.cs
│ └── Data
│ │ ├── Tags
│ │ ├── 0b6df322-5dee-4901-90a1-bf07e4e0de01.json
│ │ ├── d568c4ab-2130-4caf-a653-95176c909c07.json
│ │ └── fa29eec2-495a-4441-8968-5e9d6310688f.json
│ │ ├── Categories
│ │ ├── bebb96a0-3110-4f46-a59d-b99bc3b531e6.json
│ │ ├── edf7eda7-1f58-4e89-b9d0-18cdf596bd91.json
│ │ └── fc5fa554-4333-4bae-846a-36e0a975d321.json
│ │ ├── Comments
│ │ ├── db97df73-65ce-4921-acdd-35e3f08752ab.json
│ │ └── fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json
│ │ └── Blogposts
│ │ ├── 311e92e9-36e4-45dc-8822-1935deb0231e.json
│ │ └── 9618318e-9df8-41f9-8148-27d677e269cc.json
│ ├── SharedComponents
│ ├── Demo
│ │ ├── JSInteropSamples
│ │ │ ├── NetToJS.razor.js
│ │ │ ├── JSToReferenceNET.razor.js
│ │ │ └── JSToStaticNET.razor.js
│ │ ├── JSInteropSamplesWasm
│ │ │ ├── NetToJS.razor.js
│ │ │ └── NetToJS.razor.cs
│ │ └── HighChart.razor.js
│ ├── ReusableComponents
│ │ └── BlogButton.razor.js
│ ├── ErrorBoundaryDemo
│ │ ├── ErrorBoundaryDemo.razor
│ │ ├── ComponentWithError.razor
│ │ └── CustomErrorBoundaryDemo.razor
│ ├── wwwroot
│ │ ├── background.png
│ │ └── exampleJsInterop.js
│ ├── Pages
│ │ ├── SetFocus.razor
│ │ ├── RenderFragmentTest.razor
│ │ ├── ErrorBoundaryTest.razor
│ │ └── AlertTest.razor
│ ├── Interfaces
│ │ ├── IBrowserStorage.cs
│ │ └── IBlogNotificationService.cs
│ └── Nuget.config
│ ├── BlazorWebApp
│ ├── BlazorWebApp
│ │ ├── wwwroot
│ │ │ └── favicon.png
│ │ ├── appsettings.Development.json
│ │ ├── Components
│ │ │ ├── LoginStatus.razor
│ │ │ └── ParentCounter.razor
│ │ ├── Hubs
│ │ │ └── BlogNotificationHub.cs
│ │ └── appsettings.json
│ └── BlazorWebApp.Client
│ │ ├── wwwroot
│ │ ├── appsettings.json
│ │ └── appsettings.Development.json
│ │ └── UserInfo.cs
│ ├── RootLevelCascadingValueDemo
│ ├── RootLevelCascadingValueDemo
│ │ ├── wwwroot
│ │ │ └── favicon.png
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.json
│ │ └── Components
│ │ │ ├── Pages
│ │ │ └── Home.razor
│ │ │ └── Routes.razor
│ └── RootLevelCascadingValueDemo.Client
│ │ ├── wwwroot
│ │ ├── appsettings.json
│ │ └── appsettings.Development.json
│ │ └── CascadingValueDemo.razor
│ ├── Data.Models
│ ├── Tag.cs
│ ├── Category.cs
│ └── Data.Models.csproj
│ └── Data
│ └── BlogApiJsonDirectAccessSetting.cs
├── Chapter12
└── MyBlog
│ ├── Data.Tests
│ ├── GlobalUsings.cs
│ └── Data
│ │ ├── Tags
│ │ ├── 0b6df322-5dee-4901-90a1-bf07e4e0de01.json
│ │ ├── d568c4ab-2130-4caf-a653-95176c909c07.json
│ │ └── fa29eec2-495a-4441-8968-5e9d6310688f.json
│ │ ├── Categories
│ │ ├── bebb96a0-3110-4f46-a59d-b99bc3b531e6.json
│ │ ├── edf7eda7-1f58-4e89-b9d0-18cdf596bd91.json
│ │ └── fc5fa554-4333-4bae-846a-36e0a975d321.json
│ │ ├── Comments
│ │ ├── db97df73-65ce-4921-acdd-35e3f08752ab.json
│ │ └── fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json
│ │ └── Blogposts
│ │ ├── 311e92e9-36e4-45dc-8822-1935deb0231e.json
│ │ └── 9618318e-9df8-41f9-8148-27d677e269cc.json
│ ├── SharedComponents
│ ├── Demo
│ │ ├── JSInteropSamples
│ │ │ ├── NetToJS.razor.js
│ │ │ ├── JSToReferenceNET.razor.js
│ │ │ └── JSToStaticNET.razor.js
│ │ ├── JSInteropSamplesWasm
│ │ │ ├── NetToJS.razor.js
│ │ │ └── NetToJS.razor.cs
│ │ └── HighChart.razor.js
│ ├── ReusableComponents
│ │ └── BlogButton.razor.js
│ ├── ErrorBoundaryDemo
│ │ ├── ErrorBoundaryDemo.razor
│ │ ├── ComponentWithError.razor
│ │ └── CustomErrorBoundaryDemo.razor
│ ├── wwwroot
│ │ ├── background.png
│ │ └── exampleJsInterop.js
│ ├── Pages
│ │ ├── SetFocus.razor
│ │ ├── ThrowException.razor
│ │ ├── RenderFragmentTest.razor
│ │ ├── ErrorBoundaryTest.razor
│ │ └── AlertTest.razor
│ ├── Interfaces
│ │ ├── IBrowserStorage.cs
│ │ └── IBlogNotificationService.cs
│ └── Nuget.config
│ ├── BlazorWebAssemblyApp
│ ├── Pages
│ │ ├── Home.razor
│ │ ├── ThrowException.razor
│ │ └── Counter.razor
│ └── wwwroot
│ │ ├── favicon.png
│ │ └── icon-192.png
│ ├── BlazorWebApp
│ ├── BlazorWebApp
│ │ ├── wwwroot
│ │ │ └── favicon.png
│ │ ├── appsettings.Development.json
│ │ ├── Components
│ │ │ ├── LoginStatus.razor
│ │ │ └── ParentCounter.razor
│ │ ├── Hubs
│ │ │ └── BlogNotificationHub.cs
│ │ └── appsettings.json
│ └── BlazorWebApp.Client
│ │ ├── wwwroot
│ │ ├── appsettings.json
│ │ └── appsettings.Development.json
│ │ └── UserInfo.cs
│ ├── Data.Models
│ ├── Tag.cs
│ ├── Category.cs
│ └── Data.Models.csproj
│ └── Data
│ └── BlogApiJsonDirectAccessSetting.cs
├── Chapter13
└── MyBlog
│ ├── Data.Tests
│ ├── GlobalUsings.cs
│ └── Data
│ │ ├── Tags
│ │ ├── 0b6df322-5dee-4901-90a1-bf07e4e0de01.json
│ │ ├── d568c4ab-2130-4caf-a653-95176c909c07.json
│ │ └── fa29eec2-495a-4441-8968-5e9d6310688f.json
│ │ ├── Categories
│ │ ├── bebb96a0-3110-4f46-a59d-b99bc3b531e6.json
│ │ ├── edf7eda7-1f58-4e89-b9d0-18cdf596bd91.json
│ │ └── fc5fa554-4333-4bae-846a-36e0a975d321.json
│ │ ├── Comments
│ │ ├── db97df73-65ce-4921-acdd-35e3f08752ab.json
│ │ └── fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json
│ │ └── Blogposts
│ │ ├── 311e92e9-36e4-45dc-8822-1935deb0231e.json
│ │ └── 9618318e-9df8-41f9-8148-27d677e269cc.json
│ ├── SharedComponents
│ ├── Demo
│ │ ├── JSInteropSamples
│ │ │ ├── NetToJS.razor.js
│ │ │ ├── JSToReferenceNET.razor.js
│ │ │ └── JSToStaticNET.razor.js
│ │ ├── JSInteropSamplesWasm
│ │ │ ├── NetToJS.razor.js
│ │ │ └── NetToJS.razor.cs
│ │ └── HighChart.razor.js
│ ├── ReusableComponents
│ │ └── BlogButton.razor.js
│ ├── ErrorBoundaryDemo
│ │ ├── ErrorBoundaryDemo.razor
│ │ ├── ComponentWithError.razor
│ │ └── CustomErrorBoundaryDemo.razor
│ ├── wwwroot
│ │ ├── background.png
│ │ └── exampleJsInterop.js
│ ├── Pages
│ │ ├── SetFocus.razor
│ │ ├── ThrowException.razor
│ │ ├── RenderFragmentTest.razor
│ │ ├── ErrorBoundaryTest.razor
│ │ └── AlertTest.razor
│ ├── Interfaces
│ │ ├── IBrowserStorage.cs
│ │ └── IBlogNotificationService.cs
│ └── Nuget.config
│ ├── BlazorWebAssemblyApp
│ ├── Pages
│ │ ├── Home.razor
│ │ ├── ThrowException.razor
│ │ └── Counter.razor
│ └── wwwroot
│ │ ├── favicon.png
│ │ └── icon-192.png
│ ├── BlazorWebApp
│ ├── BlazorWebApp
│ │ ├── wwwroot
│ │ │ └── favicon.png
│ │ ├── appsettings.Development.json
│ │ ├── Components
│ │ │ ├── LoginStatus.razor
│ │ │ └── ParentCounter.razor
│ │ ├── Hubs
│ │ │ └── BlogNotificationHub.cs
│ │ └── appsettings.json
│ └── BlazorWebApp.Client
│ │ ├── wwwroot
│ │ ├── appsettings.json
│ │ └── appsettings.Development.json
│ │ └── UserInfo.cs
│ ├── Data.Models
│ ├── Tag.cs
│ ├── Category.cs
│ └── Data.Models.csproj
│ ├── MyBlog.Tests
│ └── _Imports.razor
│ └── Data
│ └── BlogApiJsonDirectAccessSetting.cs
├── ExampleData
├── Tags
│ └── Tag1.json
├── Categories
│ └── Category1.json
└── Images
│ ├── BellaGreenHaven_Story.webp
│ ├── RickyTheRaccoon_Story.webp
│ ├── EllieRainbowBrush_Story.webp
│ ├── OliverStarryQuest_Story.webp
│ ├── RockyTheHeroRaccoon_Story.webp
│ ├── WhiskersSecretGarden_Story.webp
│ ├── RoxieTheMusicalRaccoon_Story.webp
│ └── JasperCityLightsAdventure_Story.webp
├── Data
├── Categories
│ ├── Category1.json
│ └── f23ad71a-6b8c-4f25-9e0f-667211bf29df.json
├── Tags
│ ├── f19cd19f-d0f7-4198-9a6e-98028b98104c.json
│ └── f96aafe5-8369-4fc9-b169-70b93d962cc8.json
└── Comments
│ ├── 30102fc1-6181-48d8-ac74-14ad0408c5f7.json
│ ├── 719c89e1-106d-48f2-a9ed-6cc77ccd29d3.json
│ ├── ea40b9e5-0db4-46dd-89f6-94759dc169a4.json
│ ├── 97c702a2-5a73-4ba5-ab9f-e8ec5c7bc891.json
│ ├── 22ecaf2f-e056-4930-adb6-c2821ba3d54d.json
│ ├── 84f95c0c-0d3b-432f-b528-4b183a52f4fc.json
│ └── 5233b24f-0d62-4353-b956-43cde805d478.json
├── Chapter15
└── CustomElements
│ ├── AngularProject
│ ├── angularproject.client
│ │ ├── src
│ │ │ ├── assets
│ │ │ │ └── .gitkeep
│ │ │ ├── styles.css
│ │ │ ├── favicon.ico
│ │ │ ├── main.ts
│ │ │ └── app
│ │ │ │ ├── app-routing.module.ts
│ │ │ │ └── app.component.css
│ │ ├── .vscode
│ │ │ └── extensions.json
│ │ ├── nuget.config
│ │ ├── tsconfig.app.json
│ │ ├── tsconfig.spec.json
│ │ └── .editorconfig
│ └── AngularProject.Server
│ │ ├── appsettings.Development.json
│ │ ├── AngularProject.Server.http
│ │ └── appsettings.json
│ ├── RazorPagesProject
│ ├── Pages
│ │ ├── _ViewStart.cshtml
│ │ ├── _ViewImports.cshtml
│ │ ├── Privacy.cshtml
│ │ ├── Shared
│ │ │ └── _ValidationScriptsPartial.cshtml
│ │ └── Index.cshtml
│ ├── wwwroot
│ │ ├── favicon.ico
│ │ └── js
│ │ │ └── site.js
│ ├── appsettings.json
│ ├── appsettings.Development.json
│ └── RazorPagesProject.csproj
│ ├── ReactProject
│ ├── reactproject.client
│ │ ├── src
│ │ │ ├── vite-env.d.ts
│ │ │ ├── main.tsx
│ │ │ └── App.css
│ │ ├── tsconfig.node.json
│ │ ├── nuget.config
│ │ └── .gitignore
│ └── ReactProject.Server
│ │ ├── appsettings.Development.json
│ │ ├── ReactProject.Server.http
│ │ └── appsettings.json
│ ├── BlazorProject
│ ├── BlazorProject
│ │ ├── Components
│ │ │ ├── Pages
│ │ │ │ └── Home.razor
│ │ │ └── Routes.razor
│ │ ├── wwwroot
│ │ │ └── favicon.png
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ └── BlazorProject.Client
│ │ ├── wwwroot
│ │ ├── appsettings.json
│ │ └── appsettings.Development.json
│ │ ├── Program.cs
│ │ └── package.json
│ └── BlazorCustomElements
│ └── _Imports.razor
├── README.md
├── Chapter16
├── BlazorWebAssembly
│ ├── RunningCode
│ │ ├── Test.c
│ │ ├── wwwroot
│ │ │ ├── favicon.png
│ │ │ └── icon-192.png
│ │ ├── Pages
│ │ │ ├── Home.razor
│ │ │ └── Counter.razor
│ │ └── _Imports.razor
│ ├── SkiaSharpDemo
│ │ ├── wwwroot
│ │ │ ├── favicon.png
│ │ │ └── icon-192.png
│ │ └── Pages
│ │ │ └── Counter.razor
│ └── BlazorWebAssembly
│ │ ├── Pages
│ │ ├── Home.razor
│ │ └── Counter.razor
│ │ └── wwwroot
│ │ ├── favicon.png
│ │ └── icon-192.png
└── BlazorPrerender
│ ├── BlazorPrerender
│ ├── wwwroot
│ │ └── favicon.png
│ ├── Components
│ │ ├── Pages
│ │ │ └── Home.razor
│ │ └── Routes.razor
│ ├── appsettings.Development.json
│ └── appsettings.json
│ └── BlazorPrerender.Client
│ ├── wwwroot
│ ├── appsettings.json
│ └── appsettings.Development.json
│ ├── Program.cs
│ └── _Imports.razor
├── Chapter18
└── BlazorHybridApp
│ └── BlazorHybridApp
│ ├── Components
│ └── Pages
│ │ ├── Home.razor
│ │ └── Counter.razor
│ ├── wwwroot
│ └── favicon.png
│ ├── Resources
│ ├── Fonts
│ │ └── OpenSans-Regular.ttf
│ └── AppIcon
│ │ └── appicon.svg
│ ├── Properties
│ └── launchSettings.json
│ ├── MainPage.xaml.cs
│ ├── App.xaml.cs
│ ├── Platforms
│ ├── Android
│ │ └── Resources
│ │ │ └── values
│ │ │ └── colors.xml
│ ├── iOS
│ │ └── AppDelegate.cs
│ ├── MacCatalyst
│ │ └── AppDelegate.cs
│ └── Windows
│ │ └── App.xaml
│ ├── Routes.razor
│ └── _Imports.razor
├── Chapter02
└── MyBlog
│ └── BlazorWebApp
│ ├── BlazorWebApp
│ ├── wwwroot
│ │ └── favicon.png
│ ├── Components
│ │ ├── Pages
│ │ │ └── Home.razor
│ │ └── Routes.razor
│ ├── appsettings.Development.json
│ └── appsettings.json
│ └── BlazorWebApp.Client
│ ├── wwwroot
│ ├── appsettings.json
│ └── appsettings.Development.json
│ ├── Program.cs
│ └── _Imports.razor
└── Chapter17
└── SourceGeneratorDemo
├── BlazorWebAssembly
├── wwwroot
│ ├── favicon.png
│ └── icon-192.png
├── Pages
│ ├── Home.razor
│ └── Counter.razor
└── InterfaceGeneratorDemo
│ └── SampleService.cs
└── BlazorWebAssemblyApp
├── wwwroot
├── favicon.png
├── icon-192.png
└── css
│ └── open-iconic
│ └── font
│ └── fonts
│ ├── open-iconic.eot
│ ├── open-iconic.otf
│ ├── open-iconic.ttf
│ └── open-iconic.woff
├── Pages
├── Index.razor
└── Counter.razor
└── InterfaceGeneratorDemo
└── SampleService.cs
/Chapter03/MyBlog/Data.Tests/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using Xunit;
--------------------------------------------------------------------------------
/Chapter04/MyBlog/Data.Tests/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using Xunit;
--------------------------------------------------------------------------------
/Chapter05/MyBlog/Data.Tests/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using Xunit;
--------------------------------------------------------------------------------
/Chapter06/MyBlog/Data.Tests/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using Xunit;
--------------------------------------------------------------------------------
/Chapter07/MyBlog/Data.Tests/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using Xunit;
--------------------------------------------------------------------------------
/Chapter08/MyBlog/Data.Tests/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using Xunit;
--------------------------------------------------------------------------------
/Chapter09/MyBlog/Data.Tests/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using Xunit;
--------------------------------------------------------------------------------
/Chapter10/MyBlog/Data.Tests/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using Xunit;
--------------------------------------------------------------------------------
/Chapter11/MyBlog/Data.Tests/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using Xunit;
--------------------------------------------------------------------------------
/Chapter12/MyBlog/Data.Tests/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using Xunit;
--------------------------------------------------------------------------------
/Chapter13/MyBlog/Data.Tests/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using Xunit;
--------------------------------------------------------------------------------
/ExampleData/Tags/Tag1.json:
--------------------------------------------------------------------------------
1 | {"Id":"Tag1","Name":"Tag Name 1"}
--------------------------------------------------------------------------------
/Chapter03/MyBlog/RavenDb/Data.Tests/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using Xunit;
--------------------------------------------------------------------------------
/Data/Categories/Category1.json:
--------------------------------------------------------------------------------
1 | {"Id":"Category1","Name":"Category Name 1"}
--------------------------------------------------------------------------------
/Chapter03/MyBlog/EntityFramework/Data.Tests/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using Xunit;
--------------------------------------------------------------------------------
/Chapter15/CustomElements/AngularProject/angularproject.client/src/assets/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/ExampleData/Categories/Category1.json:
--------------------------------------------------------------------------------
1 | {"Id":"Category1","Name":"Category Name 1"}
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # B21849
2 |
3 | Section
4 | Key
5 | ref
6 | Templated Razor delegates
7 |
--------------------------------------------------------------------------------
/Chapter15/CustomElements/RazorPagesProject/Pages/_ViewStart.cshtml:
--------------------------------------------------------------------------------
1 | @{
2 | Layout = "_Layout";
3 | }
4 |
--------------------------------------------------------------------------------
/Data/Tags/f19cd19f-d0f7-4198-9a6e-98028b98104c.json:
--------------------------------------------------------------------------------
1 | {"Id":"f19cd19f-d0f7-4198-9a6e-98028b98104c","Name":"ljklkj"}
--------------------------------------------------------------------------------
/Data/Tags/f96aafe5-8369-4fc9-b169-70b93d962cc8.json:
--------------------------------------------------------------------------------
1 | {"Id":"f96aafe5-8369-4fc9-b169-70b93d962cc8","Name":"test2"}
--------------------------------------------------------------------------------
/Chapter15/CustomElements/ReactProject/reactproject.client/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
Use this page to detail your site's privacy policy.
9 | -------------------------------------------------------------------------------- /Chapter17/SourceGeneratorDemo/BlazorWebAssemblyApp/wwwroot/css/open-iconic/font/fonts/open-iconic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngstromJimmy/B21849/main/Chapter17/SourceGeneratorDemo/BlazorWebAssemblyApp/wwwroot/css/open-iconic/font/fonts/open-iconic.eot -------------------------------------------------------------------------------- /Chapter17/SourceGeneratorDemo/BlazorWebAssemblyApp/wwwroot/css/open-iconic/font/fonts/open-iconic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngstromJimmy/B21849/main/Chapter17/SourceGeneratorDemo/BlazorWebAssemblyApp/wwwroot/css/open-iconic/font/fonts/open-iconic.otf -------------------------------------------------------------------------------- /Chapter17/SourceGeneratorDemo/BlazorWebAssemblyApp/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngstromJimmy/B21849/main/Chapter17/SourceGeneratorDemo/BlazorWebAssemblyApp/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf -------------------------------------------------------------------------------- /Chapter03/MyBlog/Data.Tests/Data/Comments/db97df73-65ce-4921-acdd-35e3f08752ab.json: -------------------------------------------------------------------------------- 1 | {"Id":"db97df73-65ce-4921-acdd-35e3f08752ab","BlogPostId":"9618318e-9df8-41f9-8148-27d677e269cc","Date":"2023-11-03T17:01:11.6667937+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter03/MyBlog/Data.Tests/Data/Comments/fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json: -------------------------------------------------------------------------------- 1 | {"Id":"fe5e0efb-77b2-471c-ab64-164bad1cf9e9","BlogPostId":"311e92e9-36e4-45dc-8822-1935deb0231e","Date":"2023-11-03T17:02:21.820486+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter04/MyBlog/Data.Tests/Data/Comments/db97df73-65ce-4921-acdd-35e3f08752ab.json: -------------------------------------------------------------------------------- 1 | {"Id":"db97df73-65ce-4921-acdd-35e3f08752ab","BlogPostId":"9618318e-9df8-41f9-8148-27d677e269cc","Date":"2023-11-03T17:01:11.6667937+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter04/MyBlog/Data.Tests/Data/Comments/fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json: -------------------------------------------------------------------------------- 1 | {"Id":"fe5e0efb-77b2-471c-ab64-164bad1cf9e9","BlogPostId":"311e92e9-36e4-45dc-8822-1935deb0231e","Date":"2023-11-03T17:02:21.820486+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter05/MyBlog/Data.Tests/Data/Comments/db97df73-65ce-4921-acdd-35e3f08752ab.json: -------------------------------------------------------------------------------- 1 | {"Id":"db97df73-65ce-4921-acdd-35e3f08752ab","BlogPostId":"9618318e-9df8-41f9-8148-27d677e269cc","Date":"2023-11-03T17:01:11.6667937+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter05/MyBlog/Data.Tests/Data/Comments/fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json: -------------------------------------------------------------------------------- 1 | {"Id":"fe5e0efb-77b2-471c-ab64-164bad1cf9e9","BlogPostId":"311e92e9-36e4-45dc-8822-1935deb0231e","Date":"2023-11-03T17:02:21.820486+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter06/MyBlog/Data.Tests/Data/Comments/db97df73-65ce-4921-acdd-35e3f08752ab.json: -------------------------------------------------------------------------------- 1 | {"Id":"db97df73-65ce-4921-acdd-35e3f08752ab","BlogPostId":"9618318e-9df8-41f9-8148-27d677e269cc","Date":"2023-11-03T17:01:11.6667937+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter06/MyBlog/Data.Tests/Data/Comments/fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json: -------------------------------------------------------------------------------- 1 | {"Id":"fe5e0efb-77b2-471c-ab64-164bad1cf9e9","BlogPostId":"311e92e9-36e4-45dc-8822-1935deb0231e","Date":"2023-11-03T17:02:21.820486+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter07/MyBlog/Data.Tests/Data/Comments/db97df73-65ce-4921-acdd-35e3f08752ab.json: -------------------------------------------------------------------------------- 1 | {"Id":"db97df73-65ce-4921-acdd-35e3f08752ab","BlogPostId":"9618318e-9df8-41f9-8148-27d677e269cc","Date":"2023-11-03T17:01:11.6667937+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter07/MyBlog/Data.Tests/Data/Comments/fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json: -------------------------------------------------------------------------------- 1 | {"Id":"fe5e0efb-77b2-471c-ab64-164bad1cf9e9","BlogPostId":"311e92e9-36e4-45dc-8822-1935deb0231e","Date":"2023-11-03T17:02:21.820486+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter08/MyBlog/Data.Tests/Data/Comments/db97df73-65ce-4921-acdd-35e3f08752ab.json: -------------------------------------------------------------------------------- 1 | {"Id":"db97df73-65ce-4921-acdd-35e3f08752ab","BlogPostId":"9618318e-9df8-41f9-8148-27d677e269cc","Date":"2023-11-03T17:01:11.6667937+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter08/MyBlog/Data.Tests/Data/Comments/fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json: -------------------------------------------------------------------------------- 1 | {"Id":"fe5e0efb-77b2-471c-ab64-164bad1cf9e9","BlogPostId":"311e92e9-36e4-45dc-8822-1935deb0231e","Date":"2023-11-03T17:02:21.820486+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter09/MyBlog/Data.Tests/Data/Comments/db97df73-65ce-4921-acdd-35e3f08752ab.json: -------------------------------------------------------------------------------- 1 | {"Id":"db97df73-65ce-4921-acdd-35e3f08752ab","BlogPostId":"9618318e-9df8-41f9-8148-27d677e269cc","Date":"2023-11-03T17:01:11.6667937+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter09/MyBlog/Data.Tests/Data/Comments/fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json: -------------------------------------------------------------------------------- 1 | {"Id":"fe5e0efb-77b2-471c-ab64-164bad1cf9e9","BlogPostId":"311e92e9-36e4-45dc-8822-1935deb0231e","Date":"2023-11-03T17:02:21.820486+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter10/MyBlog/Data.Tests/Data/Comments/db97df73-65ce-4921-acdd-35e3f08752ab.json: -------------------------------------------------------------------------------- 1 | {"Id":"db97df73-65ce-4921-acdd-35e3f08752ab","BlogPostId":"9618318e-9df8-41f9-8148-27d677e269cc","Date":"2023-11-03T17:01:11.6667937+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter10/MyBlog/Data.Tests/Data/Comments/fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json: -------------------------------------------------------------------------------- 1 | {"Id":"fe5e0efb-77b2-471c-ab64-164bad1cf9e9","BlogPostId":"311e92e9-36e4-45dc-8822-1935deb0231e","Date":"2023-11-03T17:02:21.820486+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter11/MyBlog/Data.Tests/Data/Comments/db97df73-65ce-4921-acdd-35e3f08752ab.json: -------------------------------------------------------------------------------- 1 | {"Id":"db97df73-65ce-4921-acdd-35e3f08752ab","BlogPostId":"9618318e-9df8-41f9-8148-27d677e269cc","Date":"2023-11-03T17:01:11.6667937+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter11/MyBlog/Data.Tests/Data/Comments/fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json: -------------------------------------------------------------------------------- 1 | {"Id":"fe5e0efb-77b2-471c-ab64-164bad1cf9e9","BlogPostId":"311e92e9-36e4-45dc-8822-1935deb0231e","Date":"2023-11-03T17:02:21.820486+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter12/MyBlog/Data.Tests/Data/Comments/db97df73-65ce-4921-acdd-35e3f08752ab.json: -------------------------------------------------------------------------------- 1 | {"Id":"db97df73-65ce-4921-acdd-35e3f08752ab","BlogPostId":"9618318e-9df8-41f9-8148-27d677e269cc","Date":"2023-11-03T17:01:11.6667937+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter12/MyBlog/Data.Tests/Data/Comments/fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json: -------------------------------------------------------------------------------- 1 | {"Id":"fe5e0efb-77b2-471c-ab64-164bad1cf9e9","BlogPostId":"311e92e9-36e4-45dc-8822-1935deb0231e","Date":"2023-11-03T17:02:21.820486+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter13/MyBlog/Data.Tests/Data/Comments/db97df73-65ce-4921-acdd-35e3f08752ab.json: -------------------------------------------------------------------------------- 1 | {"Id":"db97df73-65ce-4921-acdd-35e3f08752ab","BlogPostId":"9618318e-9df8-41f9-8148-27d677e269cc","Date":"2023-11-03T17:01:11.6667937+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter13/MyBlog/Data.Tests/Data/Comments/fe5e0efb-77b2-471c-ab64-164bad1cf9e9.json: -------------------------------------------------------------------------------- 1 | {"Id":"fe5e0efb-77b2-471c-ab64-164bad1cf9e9","BlogPostId":"311e92e9-36e4-45dc-8822-1935deb0231e","Date":"2023-11-03T17:02:21.820486+01:00","Text":"Amazing post!","Name":"Jimmy"} -------------------------------------------------------------------------------- /Chapter15/CustomElements/AngularProject/AngularProject.Server/AngularProject.Server.http: -------------------------------------------------------------------------------- 1 | @AngularProject.Server_HostAddress = http://localhost:5131 2 | 3 | GET {{AngularProject.Server_HostAddress}}/weatherforecast/ 4 | Accept: application/json 5 | 6 | ### 7 | -------------------------------------------------------------------------------- /Chapter15/CustomElements/RazorPagesProject/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "DetailedErrors": true, 3 | "Logging": { 4 | "LogLevel": { 5 | "Default": "Information", 6 | "Microsoft.AspNetCore": "Warning" 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Chapter15/CustomElements/ReactProject/ReactProject.Server/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /Chapter17/SourceGeneratorDemo/BlazorWebAssembly/Pages/Home.razor: -------------------------------------------------------------------------------- 1 | @page "/" 2 | @inject GeneratedService service 3 |This is a render fragment @number
; 13 | } 14 | } -------------------------------------------------------------------------------- /Chapter06/MyBlog/SharedComponents/Pages/RenderFragmentTest.razor: -------------------------------------------------------------------------------- 1 | @page "/RenderFragmentTest" 2 | 3 | @for (int i = 0; i < 10; i++) 4 | { 5 | @Render(i) 6 | } 7 | 8 | @code 9 | { 10 | private RenderFragment Render(int number) 11 | { 12 | return @This is a render fragment @number
; 13 | } 14 | } -------------------------------------------------------------------------------- /Chapter07/MyBlog/SharedComponents/Pages/RenderFragmentTest.razor: -------------------------------------------------------------------------------- 1 | @page "/RenderFragmentTest" 2 | 3 | @for (int i = 0; i < 10; i++) 4 | { 5 | @Render(i) 6 | } 7 | 8 | @code 9 | { 10 | private RenderFragment Render(int number) 11 | { 12 | return @This is a render fragment @number
; 13 | } 14 | } -------------------------------------------------------------------------------- /Chapter08/MyBlog/SharedComponents/Pages/RenderFragmentTest.razor: -------------------------------------------------------------------------------- 1 | @page "/RenderFragmentTest" 2 | 3 | @for (int i = 0; i < 10; i++) 4 | { 5 | @Render(i) 6 | } 7 | 8 | @code 9 | { 10 | private RenderFragment Render(int number) 11 | { 12 | return @This is a render fragment @number
; 13 | } 14 | } -------------------------------------------------------------------------------- /Chapter09/MyBlog/SharedComponents/Pages/RenderFragmentTest.razor: -------------------------------------------------------------------------------- 1 | @page "/RenderFragmentTest" 2 | 3 | @for (int i = 0; i < 10; i++) 4 | { 5 | @Render(i) 6 | } 7 | 8 | @code 9 | { 10 | private RenderFragment Render(int number) 11 | { 12 | return @This is a render fragment @number
; 13 | } 14 | } -------------------------------------------------------------------------------- /Chapter10/MyBlog/SharedComponents/Pages/RenderFragmentTest.razor: -------------------------------------------------------------------------------- 1 | @page "/RenderFragmentTest" 2 | 3 | @for (int i = 0; i < 10; i++) 4 | { 5 | @Render(i) 6 | } 7 | 8 | @code 9 | { 10 | private RenderFragment Render(int number) 11 | { 12 | return @This is a render fragment @number
; 13 | } 14 | } -------------------------------------------------------------------------------- /Chapter11/MyBlog/SharedComponents/Pages/RenderFragmentTest.razor: -------------------------------------------------------------------------------- 1 | @page "/RenderFragmentTest" 2 | 3 | @for (int i = 0; i < 10; i++) 4 | { 5 | @Render(i) 6 | } 7 | 8 | @code 9 | { 10 | private RenderFragment Render(int number) 11 | { 12 | return @This is a render fragment @number
; 13 | } 14 | } -------------------------------------------------------------------------------- /Chapter12/MyBlog/SharedComponents/Pages/RenderFragmentTest.razor: -------------------------------------------------------------------------------- 1 | @page "/RenderFragmentTest" 2 | 3 | @for (int i = 0; i < 10; i++) 4 | { 5 | @Render(i) 6 | } 7 | 8 | @code 9 | { 10 | private RenderFragment Render(int number) 11 | { 12 | return @This is a render fragment @number
; 13 | } 14 | } -------------------------------------------------------------------------------- /Chapter13/MyBlog/SharedComponents/Pages/RenderFragmentTest.razor: -------------------------------------------------------------------------------- 1 | @page "/RenderFragmentTest" 2 | 3 | @for (int i = 0; i < 10; i++) 4 | { 5 | @Render(i) 6 | } 7 | 8 | @code 9 | { 10 | private RenderFragment Render(int number) 11 | { 12 | return @This is a render fragment @number
; 13 | } 14 | } -------------------------------------------------------------------------------- /Chapter10/MyBlog/SharedComponents/Demo/JSInteropSamplesWasm/NetToJS.razor.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.InteropServices.JavaScript; 2 | namespace SharedComponents.Demo.JSInteropSamplesWasm; 3 | public partial class NetToJS 4 | { 5 | [JSImport("showAlert", "nettojs")] 6 | internal static partial string ShowAlert(string message); 7 | } 8 | -------------------------------------------------------------------------------- /Chapter11/MyBlog/SharedComponents/Demo/JSInteropSamplesWasm/NetToJS.razor.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.InteropServices.JavaScript; 2 | namespace SharedComponents.Demo.JSInteropSamplesWasm; 3 | public partial class NetToJS 4 | { 5 | [JSImport("showAlert", "nettojs")] 6 | internal static partial string ShowAlert(string message); 7 | } 8 | -------------------------------------------------------------------------------- /Chapter12/MyBlog/SharedComponents/Demo/JSInteropSamplesWasm/NetToJS.razor.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.InteropServices.JavaScript; 2 | namespace SharedComponents.Demo.JSInteropSamplesWasm; 3 | public partial class NetToJS 4 | { 5 | [JSImport("showAlert", "nettojs")] 6 | internal static partial string ShowAlert(string message); 7 | } 8 | -------------------------------------------------------------------------------- /Chapter13/MyBlog/SharedComponents/Demo/JSInteropSamplesWasm/NetToJS.razor.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.InteropServices.JavaScript; 2 | namespace SharedComponents.Demo.JSInteropSamplesWasm; 3 | public partial class NetToJS 4 | { 5 | [JSImport("showAlert", "nettojs")] 6 | internal static partial string ShowAlert(string message); 7 | } 8 | -------------------------------------------------------------------------------- /Chapter15/CustomElements/ReactProject/reactproject.client/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /Chapter16/BlazorWebAssembly/RunningCode/Pages/Home.razor: -------------------------------------------------------------------------------- 1 | @page "/" 2 | @using System.Runtime.InteropServices 3 | 4 |9 | @@fact(3) result: @fact(3) 10 |
11 | 12 | @code { 13 | [DllImport("Test")] 14 | static extern int fact(int n); 15 | } -------------------------------------------------------------------------------- /Chapter18/BlazorHybridApp/BlazorHybridApp/Platforms/iOS/AppDelegate.cs: -------------------------------------------------------------------------------- 1 | using Foundation; 2 | 3 | namespace BlazorHybridApp 4 | { 5 | [Register("AppDelegate")] 6 | public class AppDelegate : MauiUIApplicationDelegate 7 | { 8 | protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Chapter18/BlazorHybridApp/BlazorHybridApp/Routes.razor: -------------------------------------------------------------------------------- 1 |@(1/zero)
5 |@(1/zero)
5 |@(1/zero)
5 |@(1/zero)
5 |@(1/zero)
5 |@(1/zero)
5 |@(1/zero)
5 |@(1/zero)
5 |@(1/zero)
5 |Learn about building Web apps with ASP.NET Core.
10 |Current count: @currentCount
6 | 7 | 8 | 9 | @code { 10 | private int currentCount = 0; 11 | 12 | private void IncrementCount() 13 | { 14 | currentCount++; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Chapter18/BlazorHybridApp/BlazorHybridApp/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using Microsoft.AspNetCore.Components.Web.Virtualization 7 | @using Microsoft.JSInterop 8 | @using BlazorHybridApp 9 | @using BlazorHybridApp.Components 10 | -------------------------------------------------------------------------------- /Chapter10/MyBlog/BlazorWebApp/BlazorWebApp/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "DetailedErrors": true, 9 | "AllowedHosts": "*", 10 | "Auth0": { 11 | "Authority": "Get this from the domain for your application at Auth0", 12 | "ClientId": "Get this from Auth0 setting" 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter11/MyBlog/BlazorWebApp/BlazorWebApp/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "DetailedErrors": true, 9 | "AllowedHosts": "*", 10 | "Auth0": { 11 | "Authority": "Get this from the domain for your application at Auth0", 12 | "ClientId": "Get this from Auth0 setting" 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter11/MyBlog/RootLevelCascadingValueDemo/RootLevelCascadingValueDemo/Components/Routes.razor: -------------------------------------------------------------------------------- 1 |Current count: @currentCount
8 | 9 | 10 | 11 | @code { 12 | private int currentCount = 0; 13 | 14 | private void IncrementCount() 15 | { 16 | currentCount++; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Chapter13/MyBlog/BlazorWebAssemblyApp/Pages/Counter.razor: -------------------------------------------------------------------------------- 1 | @page "/counter" 2 | 3 |Current count: @currentCount
8 | 9 | 10 | 11 | @code { 12 | private int currentCount = 0; 13 | 14 | private void IncrementCount() 15 | { 16 | currentCount++; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Chapter15/CustomElements/AngularProject/angularproject.client/src/app/app.component.css: -------------------------------------------------------------------------------- 1 | :host { 2 | max-width: 1280px; 3 | padding: 2rem; 4 | text-align: center; 5 | } 6 | 7 | tr:nth-child(even) { 8 | background: #F2F2F2; 9 | } 10 | 11 | tr:nth-child(odd) { 12 | background: #FFF; 13 | } 14 | 15 | th, td { 16 | padding-left: 1rem; 17 | padding-right: 1rem; 18 | } 19 | 20 | table { 21 | margin: 0 auto; 22 | } 23 | -------------------------------------------------------------------------------- /Chapter15/CustomElements/BlazorCustomElements/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using Microsoft.AspNetCore.Components.Web.Virtualization 7 | @using Microsoft.AspNetCore.Components.WebAssembly.Http 8 | @using Microsoft.JSInterop 9 | @using BlazorCustomElements 10 | -------------------------------------------------------------------------------- /Chapter15/CustomElements/RazorPagesProject/RazorPagesProject.csproj: -------------------------------------------------------------------------------- 1 |Current count: @currentCount
8 | 9 | 10 | 11 | @code { 12 | private int currentCount = 0; 13 | 14 | private void IncrementCount() 15 | { 16 | currentCount++; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Chapter16/BlazorWebAssembly/SkiaSharpDemo/Pages/Counter.razor: -------------------------------------------------------------------------------- 1 | @page "/counter" 2 | 3 |Current count: @currentCount
8 | 9 | 10 | 11 | @code { 12 | private int currentCount = 0; 13 | 14 | private void IncrementCount() 15 | { 16 | currentCount++; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Chapter16/BlazorWebAssembly/BlazorWebAssembly/Pages/Counter.razor: -------------------------------------------------------------------------------- 1 | @page "/counter" 2 | 3 |Current count: @currentCount
8 | 9 | 10 | 11 | @code { 12 | private int currentCount = 0; 13 | 14 | private void IncrementCount() 15 | { 16 | currentCount++; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Chapter02/MyBlog/BlazorWebApp/BlazorWebApp.Client/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using static Microsoft.AspNetCore.Components.Web.RenderMode 7 | @using Microsoft.AspNetCore.Components.Web.Virtualization 8 | @using Microsoft.JSInterop 9 | @using BlazorWebApp.Client 10 | -------------------------------------------------------------------------------- /Chapter03/MyBlog/BlazorWebApp/BlazorWebApp.Client/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using static Microsoft.AspNetCore.Components.Web.RenderMode 7 | @using Microsoft.AspNetCore.Components.Web.Virtualization 8 | @using Microsoft.JSInterop 9 | @using BlazorWebApp.Client 10 | -------------------------------------------------------------------------------- /Chapter03/MyBlog/Data/BlogApiJsonDirectAccessSetting.cs: -------------------------------------------------------------------------------- 1 | namespace Data; 2 | public class BlogApiJsonDirectAccessSetting 3 | { 4 | public string BlogPostsFolder { get; set; } = string.Empty; 5 | public string CategoriesFolder { get; set; } = string.Empty; 6 | public string TagsFolder { get; set; } = string.Empty; 7 | public string CommentsFolder { get; set; } = string.Empty; 8 | public string DataPath { get; set; } = string.Empty; 9 | } 10 | -------------------------------------------------------------------------------- /Chapter04/MyBlog/BlazorWebApp/BlazorWebApp.Client/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using static Microsoft.AspNetCore.Components.Web.RenderMode 7 | @using Microsoft.AspNetCore.Components.Web.Virtualization 8 | @using Microsoft.JSInterop 9 | @using BlazorWebApp.Client 10 | -------------------------------------------------------------------------------- /Chapter04/MyBlog/Data/BlogApiJsonDirectAccessSetting.cs: -------------------------------------------------------------------------------- 1 | namespace Data; 2 | public class BlogApiJsonDirectAccessSetting 3 | { 4 | public string BlogPostsFolder { get; set; } = string.Empty; 5 | public string CategoriesFolder { get; set; } = string.Empty; 6 | public string TagsFolder { get; set; } = string.Empty; 7 | public string CommentsFolder { get; set; } = string.Empty; 8 | public string DataPath { get; set; } = string.Empty; 9 | } 10 | -------------------------------------------------------------------------------- /Chapter05/MyBlog/BlazorWebApp/BlazorWebApp.Client/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using static Microsoft.AspNetCore.Components.Web.RenderMode 7 | @using Microsoft.AspNetCore.Components.Web.Virtualization 8 | @using Microsoft.JSInterop 9 | @using BlazorWebApp.Client 10 | -------------------------------------------------------------------------------- /Chapter05/MyBlog/Data/BlogApiJsonDirectAccessSetting.cs: -------------------------------------------------------------------------------- 1 | namespace Data; 2 | public class BlogApiJsonDirectAccessSetting 3 | { 4 | public string BlogPostsFolder { get; set; } = string.Empty; 5 | public string CategoriesFolder { get; set; } = string.Empty; 6 | public string TagsFolder { get; set; } = string.Empty; 7 | public string CommentsFolder { get; set; } = string.Empty; 8 | public string DataPath { get; set; } = string.Empty; 9 | } 10 | -------------------------------------------------------------------------------- /Chapter06/MyBlog/BlazorWebApp/BlazorWebApp.Client/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using static Microsoft.AspNetCore.Components.Web.RenderMode 7 | @using Microsoft.AspNetCore.Components.Web.Virtualization 8 | @using Microsoft.JSInterop 9 | @using BlazorWebApp.Client 10 | -------------------------------------------------------------------------------- /Chapter06/MyBlog/Data/BlogApiJsonDirectAccessSetting.cs: -------------------------------------------------------------------------------- 1 | namespace Data; 2 | public class BlogApiJsonDirectAccessSetting 3 | { 4 | public string BlogPostsFolder { get; set; } = string.Empty; 5 | public string CategoriesFolder { get; set; } = string.Empty; 6 | public string TagsFolder { get; set; } = string.Empty; 7 | public string CommentsFolder { get; set; } = string.Empty; 8 | public string DataPath { get; set; } = string.Empty; 9 | } 10 | -------------------------------------------------------------------------------- /Chapter07/MyBlog/BlazorWebApp/BlazorWebApp.Client/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using static Microsoft.AspNetCore.Components.Web.RenderMode 7 | @using Microsoft.AspNetCore.Components.Web.Virtualization 8 | @using Microsoft.JSInterop 9 | @using BlazorWebApp.Client 10 | -------------------------------------------------------------------------------- /Chapter07/MyBlog/Data/BlogApiJsonDirectAccessSetting.cs: -------------------------------------------------------------------------------- 1 | namespace Data; 2 | public class BlogApiJsonDirectAccessSetting 3 | { 4 | public string BlogPostsFolder { get; set; } = string.Empty; 5 | public string CategoriesFolder { get; set; } = string.Empty; 6 | public string TagsFolder { get; set; } = string.Empty; 7 | public string CommentsFolder { get; set; } = string.Empty; 8 | public string DataPath { get; set; } = string.Empty; 9 | } 10 | -------------------------------------------------------------------------------- /Chapter08/MyBlog/Data/BlogApiJsonDirectAccessSetting.cs: -------------------------------------------------------------------------------- 1 | namespace Data; 2 | public class BlogApiJsonDirectAccessSetting 3 | { 4 | public string BlogPostsFolder { get; set; } = string.Empty; 5 | public string CategoriesFolder { get; set; } = string.Empty; 6 | public string TagsFolder { get; set; } = string.Empty; 7 | public string CommentsFolder { get; set; } = string.Empty; 8 | public string DataPath { get; set; } = string.Empty; 9 | } 10 | -------------------------------------------------------------------------------- /Chapter09/MyBlog/Data/BlogApiJsonDirectAccessSetting.cs: -------------------------------------------------------------------------------- 1 | namespace Data; 2 | public class BlogApiJsonDirectAccessSetting 3 | { 4 | public string BlogPostsFolder { get; set; } = string.Empty; 5 | public string CategoriesFolder { get; set; } = string.Empty; 6 | public string TagsFolder { get; set; } = string.Empty; 7 | public string CommentsFolder { get; set; } = string.Empty; 8 | public string DataPath { get; set; } = string.Empty; 9 | } 10 | -------------------------------------------------------------------------------- /Chapter10/MyBlog/Data/BlogApiJsonDirectAccessSetting.cs: -------------------------------------------------------------------------------- 1 | namespace Data; 2 | public class BlogApiJsonDirectAccessSetting 3 | { 4 | public string BlogPostsFolder { get; set; } = string.Empty; 5 | public string CategoriesFolder { get; set; } = string.Empty; 6 | public string TagsFolder { get; set; } = string.Empty; 7 | public string CommentsFolder { get; set; } = string.Empty; 8 | public string DataPath { get; set; } = string.Empty; 9 | } 10 | -------------------------------------------------------------------------------- /Chapter11/MyBlog/Data/BlogApiJsonDirectAccessSetting.cs: -------------------------------------------------------------------------------- 1 | namespace Data; 2 | public class BlogApiJsonDirectAccessSetting 3 | { 4 | public string BlogPostsFolder { get; set; } = string.Empty; 5 | public string CategoriesFolder { get; set; } = string.Empty; 6 | public string TagsFolder { get; set; } = string.Empty; 7 | public string CommentsFolder { get; set; } = string.Empty; 8 | public string DataPath { get; set; } = string.Empty; 9 | } 10 | -------------------------------------------------------------------------------- /Chapter11/MyBlog/RootLevelCascadingValueDemo/RootLevelCascadingValueDemo.Client/CascadingValueDemo.razor: -------------------------------------------------------------------------------- 1 |Current count: @currentCount
8 | 9 | 10 | 11 | @code { 12 | private int currentCount = 0; 13 | 14 | private void IncrementCount() 15 | { 16 | currentCount++; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Chapter17/SourceGeneratorDemo/BlazorWebAssemblyApp/Pages/Counter.razor: -------------------------------------------------------------------------------- 1 | @page "/counter" 2 | 3 |Current count: @currentCount
8 | 9 | 10 | 11 | @code { 12 | private int currentCount = 0; 13 | 14 | private void IncrementCount() 15 | { 16 | currentCount++; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Chapter04/MyBlog/BlazorWebApp/BlazorWebApp/Components/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using static Microsoft.AspNetCore.Components.Web.RenderMode 7 | @using Microsoft.AspNetCore.Components.Web.Virtualization 8 | @using Microsoft.JSInterop 9 | @using BlazorWebApp.Components 10 | -------------------------------------------------------------------------------- /Chapter05/MyBlog/SharedComponents/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using static Microsoft.AspNetCore.Components.Web.RenderMode 7 | @using Microsoft.AspNetCore.Components.Web.Virtualization 8 | @using Microsoft.JSInterop 9 | @using Microsoft.AspNetCore.Components.Sections 10 | -------------------------------------------------------------------------------- /Chapter16/BlazorWebAssembly/RunningCode/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using Microsoft.AspNetCore.Components.Web.Virtualization 7 | @using Microsoft.AspNetCore.Components.WebAssembly.Http 8 | @using Microsoft.JSInterop 9 | @using RunningCode 10 | @using RunningCode.Layout 11 | -------------------------------------------------------------------------------- /Chapter08/MyBlog/BlazorWebApp/BlazorWebApp.Client/UserInfo.cs: -------------------------------------------------------------------------------- 1 | namespace BlazorWebApp.Client; 2 | 3 | // Add properties to this class and update the server and client AuthenticationStateProviders 4 | // to expose more information about the authenticated user to the client. 5 | public class UserInfo 6 | { 7 | public required string UserId { get; set; } 8 | public required string? Email { get; set; } 9 | public required string[] Roles { get; set; } 10 | } 11 | --------------------------------------------------------------------------------