Salut s'il vous plaît aidez-moi Im essayant de tester les sessions dans le noyau de asp.net mais quand je mets la session et l'obtenir d'un autre contrôleur, il semble être nulleImpossible d'accéder à la session asp.net core
Heres mon démarrage
public class Startup
{
public IConfigurationRoot Configuration { get; }
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc().AddJsonOptions(options => {
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});
// Adds a default in-memory implementation of IDistributedCache.
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromSeconds(600);
options.CookieHttpOnly = true;
});
services.AddSingleton<IConfiguration>(Configuration);
services.AddSingleton<Microsoft.AspNetCore.Http.IHttpContextAccessor, Microsoft.AspNetCore.Http.HttpContextAccessor>();
services.AddTransient<IApiHelper, ApiHelper>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseSession();
app.UseDeveloperExceptionPage();
if (env.IsDevelopment())
{
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions {
HotModuleReplacement = true,
ReactHotModuleReplacement = true
});
}
//var connectionString = Configuration.GetSection("ConnectionStrings").GetSection("ClientConnection").Value;
app.UseStaticFiles();
loggerFactory.AddConsole();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
});
}
public static void Main(string[] args) {
var host = new WebHostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseKestrel()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
et voici comment je mets la session
public class HomeController : Controller
{
public IActionResult Index()
{
HttpContext.Session.SetString("Test", "Ben Rules!");
return View();
}
public IActionResult Error()
{
return View();
}
}
et ici mon exemple de code d'obtenir la session à nouveau, mais il semble être nulle
[HttpGet("[action]")]
public IEnumerable<JobDescription> GetJobDefinitions()
{
//this is always null
var xd = HttpContext.Session.GetString("Test");
var x = _apiHelper.SendRequest<Boolean>($"api/JobRequest/GetJobRequest",null);
var returnValue = new List<JobDescription>();
returnValue = jobDescriptionManager.GetJobDescriptions();
return returnValue;
}
Merci pour l'aide
Assurez-vous que vous avez fourni un cookie de session à votre demande GET 'GetJobDefinitions'. Le cookie doit être envoyé au serveur avec chaque requête. Le serveur utilise l'ID de session du cookie pour extraire les données de session. –
Salut illya merci de répondre, pouvez-vous me donner un exemple brut merci –
Faites une requête GET dans le navigateur et recherchez un cookie nommé '.AspNet.Session' dans devtools. Le navigateur l'ajoute automatiquement aux prochaines demandes dans une session de navigateur. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state –