自定义AuthenticationStateProvider认证正常,页面刷新时抛出异常
解决Blazor页面刷新时认证服务缺失异常问题
问题原因
页面刷新时,服务器端会通过HTTP请求处理授权逻辑,此时需要依赖IAuthenticationService完成认证流程;但你仅注册了自定义AuthenticationStateProvider,未调用AddAuthentication()注册基础认证服务,导致刷新时找不到必要服务抛出异常。而正常单页导航时,Blazor客户端直接使用AuthenticationStateProvider获取认证状态,因此不会触发该错误。
解决方案
1. 注册基础认证服务
在Program.cs中添加AddAuthentication()调用,这会自动注册IAuthenticationService等核心认证服务。如果不需要特定认证方案,可直接调用:
builder.Services.AddAuthentication();
如果需要使用具体认证方案(比如Cookie、JWT),可以补充配置,以Cookie认证为例:
using Microsoft.AspNetCore.Authentication.Cookies; builder.Services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; }) .AddCookie();
2. 简化自定义认证提供者注册
你当前的注册方式存在冗余,可简化为:
// 同时注册MyAuthenticationStateProvider作为AuthenticationStateProvider的实现 builder.Services.AddScoped<AuthenticationStateProvider, MyAuthenticationStateProvider>(); // 若需在其他地方直接注入MyAuthenticationStateProvider,保留此句 builder.Services.AddScoped<MyAuthenticationStateProvider>();
验证
完成上述配置后,刷新带有[Authorize]特性的页面,异常即可消除,同时自定义认证逻辑仍能正常工作。
内容的提问来源于stack exchange,提问作者JoeTaicoon
相关产品推荐
相关产品推荐

