Skip to content

Commit c909955

Browse files
authored
Improve Blazor project template (#52234)
# Use consistent code style in Blazor project templates - Removed usage of top-level statements in client project if "Do not use top-level statements" is selected - Removed extra "@" in `@render-mode` values - Always use `typeof(Namespace._Imports).Assembly` instead of `typeof(Counter).Assembly` so the compilation does not break when the sample Counter component is removed, and so the code is more consistent with how it is when no sample content is generated - Added Account/AccessDenied endpoint to individual auth option to match Identity UI razor pages. This is shown when the user is authenticated but unauthorized by default. Fixes #52079 Fixes #52084 Fixes #52167 ## Customer Impact In addition to not using top-level statements when the customer requests that we don't, this improves code style consistency within the Blazor project template and with the Blazor docs. ## Regression? - [ ] Yes - [x] No ## Risk - [ ] High - [ ] Medium - [x] Low These are small stylistic changes to the Blazor project templates. ## Verification - [x] Manual (required) - [ ] Automated ## Packaging changes reviewed? - [ ] Yes - [ ] No - [x] N/A
1 parent 4373734 commit c909955

File tree

8 files changed

+59
-21
lines changed

8 files changed

+59
-21
lines changed

src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/.template.config/template.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,15 @@
7373
{
7474
"condition": "(!UseProgramMain)",
7575
"exclude": [
76-
"BlazorWeb-CSharp/Program.Main.cs"
76+
"BlazorWeb-CSharp/Program.Main.cs",
77+
"BlazorWeb-CSharp.Client/Program.Main.cs"
7778
]
7879
},
7980
{
8081
"condition": "(UseProgramMain)",
8182
"exclude": [
82-
"BlazorWeb-CSharp/Program.cs"
83+
"BlazorWeb-CSharp/Program.cs",
84+
"BlazorWeb-CSharp.Client/Program.cs"
8385
],
8486
"rename": {
8587
"Program.Main.cs": "Program.cs"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#if (IndividualLocalAuth)
2+
using BlazorWeb_CSharp.Client;
3+
using Microsoft.AspNetCore.Components.Authorization;
4+
#endif
5+
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
6+
7+
namespace BlazorWeb_CSharp.Client;
8+
9+
class Program
10+
{
11+
static async Task Main(string[] args)
12+
{
13+
var builder = WebAssemblyHostBuilder.CreateDefault(args);
14+
15+
#if (IndividualLocalAuth)
16+
builder.Services.AddAuthorizationCore();
17+
builder.Services.AddCascadingAuthenticationState();
18+
builder.Services.AddSingleton<AuthenticationStateProvider, PersistentAuthenticationStateProvider>();
19+
20+
#endif
21+
await builder.Build().RunAsync();
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
@page "/Account/AccessDenied"
2+
3+
<PageTitle>Access denied</PageTitle>
4+
5+
<header>
6+
<h1 class="text-danger">Access denied</h1>
7+
<p class="text-danger">You do not have access to this resource.</p>
8+
</header>

src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/App.razor

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,27 @@
1616
@*#if (!InteractiveAtRoot)
1717
<HeadOutlet />
1818
##elseif (IndividualLocalAuth)
19-
<HeadOutlet @rendermode="@RenderModeForPage" />
19+
<HeadOutlet @rendermode="RenderModeForPage" />
2020
##elseif (UseServer && UseWebAssembly)
21-
<HeadOutlet @rendermode="@InteractiveAuto" />
21+
<HeadOutlet @rendermode="InteractiveAuto" />
2222
##elseif (UseServer)
23-
<HeadOutlet @rendermode="@InteractiveServer" />
23+
<HeadOutlet @rendermode="InteractiveServer" />
2424
##else
25-
<HeadOutlet @rendermode="@InteractiveWebAssembly" />
25+
<HeadOutlet @rendermode="InteractiveWebAssembly" />
2626
##endif*@
2727
</head>
2828

2929
<body>
3030
@*#if (!InteractiveAtRoot)
3131
<Routes />
3232
##elseif (IndividualLocalAuth)
33-
<Routes @rendermode="@RenderModeForPage" />
33+
<Routes @rendermode="RenderModeForPage" />
3434
##elseif (UseServer && UseWebAssembly)
35-
<Routes @rendermode="@InteractiveAuto" />
35+
<Routes @rendermode="InteractiveAuto" />
3636
##elseif (UseServer)
37-
<Routes @rendermode="@InteractiveServer" />
37+
<Routes @rendermode="InteractiveServer" />
3838
##else
39-
<Routes @rendermode="@InteractiveWebAssembly" />
39+
<Routes @rendermode="InteractiveWebAssembly" />
4040
##endif*@
4141
<script src="_framework/blazor.web.js"></script>
4242
</body>

src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Routes.razor

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22
@using BlazorWeb_CSharp.Components.Account.Shared
33
##endif*@
44
@*#if (UseWebAssembly && !InteractiveAtRoot)
5-
<Router AppAssembly="@typeof(Program).Assembly" AdditionalAssemblies="new[] { typeof(Client._Imports).Assembly }">
5+
<Router AppAssembly="typeof(Program).Assembly" AdditionalAssemblies="new[] { typeof(Client._Imports).Assembly }">
66
##else
7-
<Router AppAssembly="@typeof(Program).Assembly">
7+
<Router AppAssembly="typeof(Program).Assembly">
88
##endif*@
99
<Found Context="routeData">
1010
@*#if (IndividualLocalAuth)
11-
<AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(Layout.MainLayout)">
11+
<AuthorizeRouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)">
1212
<NotAuthorized>
1313
<RedirectToLogin />
1414
</NotAuthorized>
1515
</AuthorizeRouteView>
1616
##else
17-
<RouteView RouteData="@routeData" DefaultLayout="@typeof(Layout.MainLayout)" />
17+
<RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" />
1818
##endif*@
19-
<FocusOnNavigate RouteData="@routeData" Selector="h1" />
19+
<FocusOnNavigate RouteData="routeData" Selector="h1" />
2020
</Found>
2121
</Router>

src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Program.Main.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,7 @@ public static void Main(string[] args)
124124
#else
125125
app.MapRazorComponents<App>();
126126
#endif
127-
#if (UseWebAssembly && SampleContent)
128-
.AddAdditionalAssemblies(typeof(Counter).Assembly);
129-
#elif (UseWebAssembly)
127+
#if (UseWebAssembly)
130128
.AddAdditionalAssemblies(typeof(Client._Imports).Assembly);
131129
#endif
132130

src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Program.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,7 @@
118118
#else
119119
app.MapRazorComponents<App>();
120120
#endif
121-
#if (UseWebAssembly && SampleContent)
122-
.AddAdditionalAssemblies(typeof(Counter).Assembly);
123-
#elif (UseWebAssembly)
121+
#if (UseWebAssembly)
124122
.AddAdditionalAssemblies(typeof(BlazorWeb_CSharp.Client._Imports).Assembly);
125123
#endif
126124

src/ProjectTemplates/test/Templates.Tests/template-baselines.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,7 @@
540540
"Components/Account/IdentityNoOpEmailSender.cs",
541541
"Components/Account/IdentityRedirectManager.cs",
542542
"Components/Account/IdentityUserAccessor.cs",
543+
"Components/Account/Pages/AccessDenied.razor",
543544
"Components/Account/Pages/ConfirmEmail.razor",
544545
"Components/Account/Pages/ConfirmEmailChange.razor",
545546
"Components/Account/Pages/ExternalLogin.razor",
@@ -642,6 +643,7 @@
642643
"Components/Account/IdentityRedirectManager.cs",
643644
"Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs",
644645
"Components/Account/IdentityUserAccessor.cs",
646+
"Components/Account/Pages/AccessDenied.razor",
645647
"Components/Account/Pages/ConfirmEmail.razor",
646648
"Components/Account/Pages/ConfirmEmailChange.razor",
647649
"Components/Account/Pages/ExternalLogin.razor",
@@ -718,6 +720,7 @@
718720
"Components/Account/IdentityRedirectManager.cs",
719721
"Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs",
720722
"Components/Account/IdentityUserAccessor.cs",
723+
"Components/Account/Pages/AccessDenied.razor",
721724
"Components/Account/Pages/ConfirmEmail.razor",
722725
"Components/Account/Pages/ConfirmEmailChange.razor",
723726
"Components/Account/Pages/ExternalLogin.razor",
@@ -836,6 +839,7 @@
836839
"{ProjectName}/Components/Account/IdentityNoOpEmailSender.cs",
837840
"{ProjectName}/Components/Account/IdentityRedirectManager.cs",
838841
"{ProjectName}/Components/Account/IdentityUserAccessor.cs",
842+
"{ProjectName}/Components/Account/Pages/AccessDenied.razor",
839843
"{ProjectName}/Components/Account/Pages/ConfirmEmail.razor",
840844
"{ProjectName}/Components/Account/Pages/ConfirmEmailChange.razor",
841845
"{ProjectName}/Components/Account/Pages/ExternalLogin.razor",
@@ -953,6 +957,7 @@
953957
"{ProjectName}/Components/Account/IdentityNoOpEmailSender.cs",
954958
"{ProjectName}/Components/Account/IdentityRedirectManager.cs",
955959
"{ProjectName}/Components/Account/IdentityUserAccessor.cs",
960+
"{ProjectName}/Components/Account/Pages/AccessDenied.razor",
956961
"{ProjectName}/Components/Account/Pages/ConfirmEmail.razor",
957962
"{ProjectName}/Components/Account/Pages/ConfirmEmailChange.razor",
958963
"{ProjectName}/Components/Account/Pages/ExternalLogin.razor",
@@ -1214,6 +1219,7 @@
12141219
"{ProjectName}/Components/Account/IdentityNoOpEmailSender.cs",
12151220
"{ProjectName}/Components/Account/IdentityRedirectManager.cs",
12161221
"{ProjectName}/Components/Account/IdentityUserAccessor.cs",
1222+
"{ProjectName}/Components/Account/Pages/AccessDenied.razor",
12171223
"{ProjectName}/Components/Account/Pages/ConfirmEmail.razor",
12181224
"{ProjectName}/Components/Account/Pages/ConfirmEmailChange.razor",
12191225
"{ProjectName}/Components/Account/Pages/ExternalLogin.razor",
@@ -1282,6 +1288,7 @@
12821288
"Components/Account/IdentityRedirectManager.cs",
12831289
"Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs",
12841290
"Components/Account/IdentityUserAccessor.cs",
1291+
"Components/Account/Pages/AccessDenied.razor",
12851292
"Components/Account/Pages/ConfirmEmail.razor",
12861293
"Components/Account/Pages/ConfirmEmailChange.razor",
12871294
"Components/Account/Pages/ExternalLogin.razor",
@@ -1375,6 +1382,7 @@
13751382
"{ProjectName}/Components/Account/IdentityNoOpEmailSender.cs",
13761383
"{ProjectName}/Components/Account/IdentityRedirectManager.cs",
13771384
"{ProjectName}/Components/Account/IdentityUserAccessor.cs",
1385+
"{ProjectName}/Components/Account/Pages/AccessDenied.razor",
13781386
"{ProjectName}/Components/Account/Pages/ConfirmEmail.razor",
13791387
"{ProjectName}/Components/Account/Pages/ConfirmEmailChange.razor",
13801388
"{ProjectName}/Components/Account/Pages/ExternalLogin.razor",
@@ -1459,6 +1467,7 @@
14591467
"{ProjectName}/Components/Account/IdentityNoOpEmailSender.cs",
14601468
"{ProjectName}/Components/Account/IdentityRedirectManager.cs",
14611469
"{ProjectName}/Components/Account/IdentityUserAccessor.cs",
1470+
"{ProjectName}/Components/Account/Pages/AccessDenied.razor",
14621471
"{ProjectName}/Components/Account/Pages/ConfirmEmail.razor",
14631472
"{ProjectName}/Components/Account/Pages/ConfirmEmailChange.razor",
14641473
"{ProjectName}/Components/Account/Pages/ExternalLogin.razor",

0 commit comments

Comments
 (0)