Blazor WASM:浏览器回退时OnParameterSetAsync参数未正确初始化问题
导航回退的组件生命周期时序问题
Blazor WASM处理浏览器回退导航时,若组件开启缓存(部分场景默认启用),会优先从路由缓存恢复组件实例。此时第一次触发SetParametersAsync/OnParameterSetAsync时,查询参数的解析流程尚未完成——组件参数设置是实例恢复后的即时操作,而查询参数的提取绑定属于导航管道的后续阶段,因此首次调用时参数未被初始化。第二次调用则是导航管道完成查询参数解析后,主动触发的参数更新,此时参数值正确。[SupplyParameterFromQuery]的绑定逻辑特性
[SupplyParameterFromQuery]的参数绑定由Blazor内置的查询参数绑定器处理,该绑定器的执行时机晚于组件实例恢复后的首次参数设置。当回退导航触发时,组件先以缓存参数或默认值完成第一次参数设置,待绑定器解析完当前URI的查询参数后,会再次触发参数更新,导致两次方法调用。AD认证的路由拦截影响
使用AD认证的Blazor WASM应用通常会通过AuthorizeRouteView或自定义认证逻辑做路由守卫。回退到受保护页面时,认证系统会先执行身份验证流程,这个过程会延迟或中断原本的导航时序:第一次参数设置发生在导航初始化阶段(未完成认证),第二次则是在认证通过后,导航流程继续执行查询参数绑定后的参数更新。堆栈跟踪差异的本质
首次调用的堆栈跟踪来自组件实例的恢复/初始化流程,不包含查询参数绑定相关的调用链;第二次调用的堆栈则会包含QueryParameterAttribute绑定逻辑的相关方法(比如QueryParameterHelper类的调用),因为第二次是查询参数解析完成后主动发起的参数更新操作。
内容的提问来源于stack exchange,提问作者Luis Abreu

