Я создал проект API ядра 2.1 для asp.net и мне нужно сохранить все пользовательские данные и разрешения в сеансе.
Но когда я вызываю другой сеанс API, возвращаем значение null
.
Кто-нибудь может мне помочь с этой проблемой?
в файле startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddSession();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
var sqlConnectionString = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContext<QDeskDevContext>(options => options.UseSqlServer(sqlConnectionString));
DependencyInjectionConfig.AddScope(services);
JwtTokenConfig.AddAuthentication(services, Configuration);
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
services.AddSignalR();
services.AddAuthorization(options =>
{
options.AddPolicy("sessionHandling", policy => policy.Requirements.Add(new sessionRequirement()));
});
services.AddSingleton<IAuthorizationHandler, sessionAuthorizationHandler>();
}
я функция конфигурации я добавил app.UseSession ();
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSession();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseCors("CorsPolicy");
app.UseMiddleware(typeof(ExcMiddleware));
app.UseSignalR(routes =>
{
routes.MapHub<QDeskHub>("/QDesk");
});
app.UseAuthentication();
app.UseCookiePolicy();
app.UseMvc();
}
мои действия API
[HttpPost]
public ActionResult login([FromBody]LoginVM loginVM)
{
TryValidateModel(loginVM);
if (ModelState.IsValid)
{
string encPassword = common.creatHashPW(loginVM.Password);
TblCpUsers checkedUser = _UserService.login(loginVM.Email, encPassword);
if (checkedUser != null)
{
string token = _UserService.BuildToken(checkedUser, loginVM.encPassword, loginVM.isPersistent, loginVM.language);
// here i set session value
HttpContext.Session.SetString("token", token);
return Ok(new { token = token });
}
}}
здесь я хочу получить значение сеанса
[HttpGet]
public object GetUserProfileData()
{
var token = HttpContext.Session.GetString("token") ?? string.Empty; // token return null
// this is my problem
string userId = HttpContext.User.Claims.ToList().Single(d => d.Type == "id").Value;
if (userId != null)
{
user user = _userService.get_user_data_by_encId(userId);
if (user != null)
{
return _stCbUserServices.GetUserById(user.userInfo.UserId);
}
else
{
return ResultFilter.exception;
}
}
else
{
return ResultFilter.userNotFound;
}
}