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!


