Recentemente enfrentei um problema, que foi trafegar dados entre páginas com asp.net core. Acabei utilizando sessões que foi bastante fácil de configurar e utilizar com .net.
Primeiramente , altere o método ConfigureServices()
classe de Startup
, adicione serviços para a sessão e seu armazenamento de backup:
public void ConfigureServices( IServiceCollection services) { services.AddDistributedMemoryCache(); services.AddSession(); } public void Configure( IApplicationBuilder app, IHostingEnvironment env) { app.UseSession(); app.Use(async (context, next) => { context.Session.SetString("GreetingMessage", "Hello Session State"); await next(); }); app.Run(async (context) => { var message = context.Session.GetString("GreetingMessage"); await context.Response.WriteAsync($"{message}"); }); }
Você pode utilizar o método GetString ou SetString em qualquer parte do seu código, com isto você poderá armazenar informações e obtê-las posteriormente.
Durante a configuração dos serviços de sessão, podemos definir várias propriedades:
- HttpOnly : define se o cookie é acessível por meio do JavaScript. O padrão é true, o que significa que não pode ser acessado via scripts no lado do cliente.
- Name : usado para substituir o nome do cookie padrão.
- SecurePolicy : determina se o cookie de sessão é transmitido somente por meio de solicitações HTTPS.
- IdleTimeout : define o tempo de expiração da sessão, cada solicitação redefine o tempo limite. O padrão é 20 minutos.
Veja o exemplo:
public void ConfigureServices( IServiceCollection services) { services.AddDistributedMemoryCache(); services.AddSession(options => { options.Cookie.HttpOnly = true; options.Cookie.Name = ".Fiver.Session"; options.Cookie.SecurePolicy = CookieSecurePolicy.Always; options.IdleTimeout = TimeSpan.FromMinutes(10); }); }
Você também pode armazenar objetos, basta apenas fazer uma adição de um método na classe HttpContext.Session
(ou ISession
que implementa o método) e assim podemos serializar objetos em strings JSON para conseguir isso:
public static class SessionExtensions { public static void SetObject<T>(this ISession session, string key, T value) { session.SetString(key, JsonConvert.SerializeObject(value)); } public static T GetObject<T>(this ISession session, string key) { var value = session.GetString(key); return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value); } }
Você pode obter o código fonte do projeto aqui assim como suas referências: https://github.com/jhomarolo/Fiver.Asp.SessionState
Um abraço!