C# 分布式缓存会话在单独请求时返回NULL,为什么?
请帮忙! 该项目是一个.NetCore 3.1 MVC web应用程序。 我在尝试使会话与分布式缓存改进一起工作时遇到问题。 缓存运行良好,它被保存到SQL server,并且检索也很好。 然后我测试了会话。。。如果我设置了一个请求,并尝试从另一个请求获取,我总是会得到NULL,我已经查看了所有可能的指南,无法解决该问题。 值得注意的是,会话正在保存到我的数据库中,我无法访问它! 这是我的创业:C# 分布式缓存会话在单独请求时返回NULL,为什么?,c#,asp.net-core,session,.net-core,distributed-caching,C#,Asp.net Core,Session,.net Core,Distributed Caching,请帮忙! 该项目是一个.NetCore 3.1 MVC web应用程序。 我在尝试使会话与分布式缓存改进一起工作时遇到问题。 缓存运行良好,它被保存到SQL server,并且检索也很好。 然后我测试了会话。。。如果我设置了一个请求,并尝试从另一个请求获取,我总是会得到NULL,我已经查看了所有可能的指南,无法解决该问题。 值得注意的是,会话正在保存到我的数据库中,我无法访问它! 这是我的创业: #define SQLServer // Redis using System; usi
#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?}");
});
}
}
}
请救救我:(提前谢谢大家!我花了将近两天的时间才发现问题发生在一个意想不到的地方。。。 该死的客户端!我使用了MDN的fetch,但没有添加“允许凭据:true”,这意味着浏览器从未保存cookie 一个简单的新手错误,结果花了很多时间。。。
我希望如果你碰巧遇到了同样的问题,你能用我的答案更快地解决它我花了将近两天的时间才找到了这个问题,它发生在一个意想不到的地方。。。 该死的客户端!我使用了MDN的fetch,但没有添加“允许凭据:true”,这意味着浏览器从未保存cookie 一个简单的新手错误,结果花了很多时间。。。 我希望如果你碰巧遇到同样的问题,你能用我的答案更快地解决它
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");
}