Blazor Server中Razor页面HTML可用@context.User,@code中不可用的原因
问题原因及解决方案
核心原因
HTML部分的@context是Blazor提供的语法糖,它自动关联了CascadingAuthenticationState传递下来的AuthenticationState对象。但@code代码块并不会自动识别这个context变量,必须通过显式声明级联参数的方式来获取AuthenticationState。
解决步骤
- 在
@code块中声明一个级联参数,类型为Task<AuthenticationState>:[CascadingParameter] private Task<AuthenticationState> AuthenticationStateTask { get; set; } - 在需要获取用户名的逻辑中,先await这个任务拿到AuthenticationState实例,再提取用户信息:
var authState = await AuthenticationStateTask; var currentUserName = authState.User.Identity?.Name;
补充说明
CascadingAuthenticationState的作用是将AuthenticationState作为级联值在组件树中传递,HTML模板里的@context是Blazor为了简化模板写法提供的快捷方式,但代码块没有这种自动绑定机制,必须手动注入级联参数才能访问到认证状态。
内容的提问来源于stack exchange,提问作者David Thielen
相关产品推荐
相关产品推荐

