是因为在发布模式下,ASP.NET Core应用程序默认会启用应用程序的性能优化功能,其中包括将身份验证中间件的用户标识缓存到内存中,以提高性能。这意味着在发布模式下,HttpContext.User.Identity可能会返回缓存的用户标识,而不会实时地从身份验证服务获取最新的用户标识。
要解决这个问题,可以尝试以下几种方法:
services.Configure<SecurityStampValidatorOptions>(options =>
{
options.ValidationInterval = TimeSpan.Zero;
});
这将禁用用户标识的缓存,使得HttpContext.User.Identity在发布模式下能够实时地获取最新的用户标识。
var result = await HttpContext.AuthenticateAsync();
if (result.Succeeded)
{
var user = result.Principal;
// 获取用户标识的逻辑
}
这将确保在发布模式下,HttpContext.User.Identity能够获取到最新的用户标识。
public void ConfigureServices(IServiceCollection services)
{
// 配置身份验证中间件
services.AddAuthentication()
.AddCookie(options =>
{
options.Cookie.Name = "YourCookieName";
// 其他配置选项
});
// 其他服务配置
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 其他中间件配置
// 使用身份验证中间件
app.UseAuthentication();
// 使用授权中间件
app.UseAuthorization();
// 其他配置
}
确保正确配置身份验证中间件可以解决HttpContext.User.Identity在发布模式下不起作用的问题。
总结起来,要解决HttpContext.User.Identity在发布模式下不起作用的问题,可以禁用用户标识缓存、手动进行身份验证或检查身份验证中间件的配置。这样可以确保HttpContext.User.Identity能够在发布模式下正常工作,并返回最新的用户标识。
领取专属 10元无门槛券
手把手带您无忧上云