我在下面有这个 AuthorizeRouteView 部分,它让我困惑的是“context”变量(第 3 行)的定义方式和位置。我查看了 dotnetcore source code 无济于事。任何帮助将不胜感激!
<AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
<NotAuthorized>
@if (!context.User.Identity!.IsAuthenticated)
{
@*<RedirectToLogin />*@
}
else
{
<p>You are not authorized to access this resource.</p>
}
</NotAuthorized>
</AuthorizeRouteView>
@context
是一个 AuthencationState
,在 .razor 组件中使用它的一种方法是通过 级联参数
您可以在顶级 App.razor 组件中查找
<CascadingAuthenticationState>
标签。
经过一些简短的测试,我找到了
@context
的来源。 @context
似乎是 Blazor 在使用类型参数定义渲染片段(即 ChildContent
)时提供的参数的特殊名称,例如 RenderFragment<string>
。该 <string>
类型参数将成为 @context
变量的类型。考虑这段代码:
@* ExampleComponent.razor *@
@ChildContent?.Invoke("This is our example string")
@code {
[Parameter] public RenderFragment<string>? ChildContent { get; set; }
}
@* Home.razor *@
@page "/"
<ExampleComponent>
The provided string is: @context @* This becomes "The provided string is: This is our example string" *@
</ExampleComponent>
在
AuthorizationRouteView
中,上下文参数可能来自
[Parameter]
public RenderFragment<AuthenticationState>? NotAuthorized { get; set; }