состояние сеанса не работает в проекте Api Core 2.1 Core API - PullRequest
0 голосов
/ 27 апреля 2019

Я создал проект 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;
            }






        }

1 Ответ

0 голосов
/ 27 апреля 2019

Не ясно, если вы добавили вызов «UseSession ()» в Configure?

например:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseSession(); // ----> Have you added this ?
    app.UseHttpContextItemsMiddleware();
    app.UseMvc();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...