{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}
11/11/2010
Agora no ASP.NET MVC 3 Release Candidate temos uma facilidade para trabalhar com Controllers que devem ser totalmente desprovidos de session state: ControllerSessionStateAttribute.Este atributo permite configurar de forma bastante simples a forma como o controller lida com seu session state.Ele possui um parâmetro que diz como o controller deve se comportar. Este pasrâmetr recebe um enum: SessionStateBehavior, que possui os valores: Default, Disabled, ReadOnly, Required.
Este é o padrão de session state do ASP.NET. Usa as configurações de session state do request.
Com este modo a sessão não fica disponível, causando uma exception quando tentamos acessar a mesma, seja para escrita ou leitura. Literalmente não há acesso ao session state.
Com este modo configurado o session state pode apenas ser lido. Quaisquer alterações(updates) realizados não surtirão efeito. Exceptions não são disparadas, mas valores setados não estarão disponíveis.
Acesso total de escrita e leitura. Esta configuração irá sobrescrever outras configurações que possam ter sido feitar para o request.Vamos ver um pequeno exemplo (retirado do Release Notes do ASP.NET MVC 3 RC):
[ControllerSessionState(SessionStateBehavior.Disabled)]
public class CoolController : Controller {
public ActionResult Index() { object o = Session["Key"];
// Causes an exception. }
}
Como podemos ver na linha 1 este controller está com session state desabilitado, desta forma ao tentar acessar a Session receberemos uma exception. Em outras palavras: Este controller é Sessionless, não possui sessão!Abaixo vemos um controller que só pode ler a Session e não pode colocar dados na mesma:
[ControllerSessionState(SessionStateBehavior.ReadOnly)]
public class CoolController : Controller {
public ActionResult Index() { Session["Key"] = "value";
// Value is not available in the next request }
}
Como vemos, uma exception não é disparada, mas os dados colocados na sessão não permanecerão lá. É como ter acesso e não conseguir gravar os dados.
Um recurso bem interessante, que começa a aproximar o ASP.NET MVC ainda mais do HTTP, que por padrão é stateless. Minha idéia é de que isto tudo está correto, porém apesar de o HTTP ser stateless a web não é. Estamos acostumados a trabalhar com aplicativos que mantém estado. Agora, cabe a nós o cuidado e a sabedoria de como manter e fornecer estes estados.Abraços e enjoy ASP.NET MVC 3 RC,Vinicius Quaiato.