在ASP.NET Core中托管的Blazor WebAssembly (Wasm) 应用程序中,User.Identity.Name
为空可能是因为以下几个原因:
User.Identity.Name
可能会为空。确保你的Startup.cs
或Program.cs
文件中配置了正确的身份验证中间件。例如,如果你使用Azure AD进行身份验证,你的配置可能如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options =>
{
options.Authority = Configuration["AzureAd:AadInstance"] + Configuration["AzureAd:TenantId"];
options.ClientId = Configuration["AzureAd:ClientId"];
options.CallbackPath = Configuration["AzureAd:CallbackPath"];
});
services.AddRazorPages();
services.AddServerSideBlazor();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
});
}
确保服务器端在用户登录后,通过SignalR将用户信息传递给Blazor Wasm客户端。
确保浏览器允许设置和读取Cookie。你可以在浏览器的隐私设置中检查这一点。
如果你的应用程序与身份验证服务器不在同一个域上,确保在Startup.cs
或Program.cs
中配置了CORS策略:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("AllowAllOrigins",
builder =>
{
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
});
// ...其他服务配置...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...其他中间件配置...
app.UseCors("AllowAllOrigins");
// ...其他中间件配置...
}
确保按照上述步骤检查和配置你的应用程序,以解决User.Identity.Name
为空的问题。
领取专属 10元无门槛券
手把手带您无忧上云