пожалуйста, помогите! Проект представляет собой веб-приложение .NetCore 3.1 MVC. У меня возникла проблема при попытке заставить мой сеанс работать с моим распределенным кэшированием. Кэш-память работает хорошо, она сохраняется на сервере SQL и также хорошо восстанавливается. затем я проверил сессию ... Если я установил один запрос и попытался получить другой запрос, я ВСЕГДА получаю значение NULL, я просмотрел все возможные руководства и не смог решить проблему. Стоит отметить, что сеанс сохраняется в моей базе данных, я просто не могу получить к нему доступ! это мой стартап:
#define SQLServer // Redis
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace DigitalBusiness.Caching.WebTester
{
publicclassStartup
{
publicStartup(IConfiguration configuration, IWebHostEnvironment hostEnviroment)
{
Configuration = configuration;
HostEnviroment = hostEnviroment;
}
public IConfiguration Configuration { get; }
public IWebHostEnvironment HostEnviroment { get; }
// This method gets called by the runtime. Use this method to add services to the container.
publicvoid ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddHttpContextAccessor();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
if (HostEnviroment.IsDevelopment())
{
services.AddDistributedMemoryCache();
services.AddSession();
}
else
{
#if SQLServer
services.AddDistributedSqlServerCache(options => {
options.ConnectionString = Configuration["RawData"];
options.SchemaName = "dbo";
options.TableName = "SessionCache_Test_To_Remove";
});
services.AddSession(opts => {
opts.IdleTimeout = TimeSpan.FromSeconds(60);
opts.Cookie.HttpOnly = true;
opts.Cookie.IsEssential = true;
});
#else
services.AddStackExchangeRedisCache(options => {
options.Configuration = "localhost";
options.InstanceName = "SampleInstance"
});
#endif
}
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
publicvoid Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseSession();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=CacheTester}/{action=Index}/{id?}");
});
}
}
}
и это мои методы контроллера. Примечание: когда я пытаюсь получить доступ к данным Session, я вижу sessionCook ie в первом вызове, возвращаемом клиенту. но он не добавляется к последующим запросам к серверу ... кроме того, Expire всегда равен -1.
public void GetSession()
{
//When i call this method, after i called the "SetSession" before, i get NULL
var t = HttpContext.Session.GetString("123");
}
[HttpPost]
public void SetSession([FromBody]model postData)
{
HttpContext.Session.SetString("123", "asd");
//Here i get the session value with no issues!
var t = HttpContext.Session.GetString("123");
}
Пожалуйста, спасите меня :( Заранее спасибо, ребята!