asp.net - questions - Establecer la variable de sesión en Application_BeginRequest
asp net mvc questions and answers for interview (3)
Pruebe AcquireRequestState en Global.asax. La sesión está disponible en este evento que se activa para cada solicitud:
void Application_AcquireRequestState(object sender, EventArgs e)
{
// Session is Available here
HttpContext context = HttpContext.Current;
context.Session["foo"] = "foo";
}
Valamas - Edición sugerida:
Utilicé esto con MVC 3 con éxito y evita el error de sesión.
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
if (context != null && context.Session != null)
{
context.Session["foo"] = "foo";
}
}
Estoy usando ASP.NET MVC y necesito establecer una variable de sesión en Application_BeginRequest
. El problema es que en este punto el objeto HttpContext.Current.Session
es siempre null
.
protected void Application_BeginRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.Session != null)
{
//this code is never executed, current session is always null
HttpContext.Current.Session.Add("__MySessionVariable", new object());
}
}
Puede usar los elementos de la sesión en Application_BeginRequest de esta manera:
protected void Application_BeginRequest(object sender, EventArgs e)
{
//Note everything hardcoded, for simplicity!
HttpCookie cookie = HttpContext.Current.Request.Cookies.Get("LanguagePref");
if (cookie == null)
return;
string language = cookie["LanguagePref"];
if (language.Length<2)
return;
language = language.Substring(0, 2).ToLower();
HttpContext.Current.Items["__SessionLang"] = language;
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(language);
}
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
if (context != null && context.Session != null)
{
context.Session["Lang"] = HttpContext.Current.Items["__SessionLang"];
}
}
Tal vez podrías cambiar el paradigma ... Tal vez puedas usar otra propiedad de la clase HttpContext, más específicamente HttpContext.Current.Items como se muestra a continuación:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
HttpContext.Current.Items["__MySessionVariable"] = new object();
}
No lo almacenará en la sesión, pero se almacenará en el diccionario de elementos de la clase HttpContext y estará disponible mientras dure esa solicitud específica . Ya que lo está configurando en cada solicitud, realmente tendría más sentido almacenarlo en un diccionario "por sesión" que, dicho sea de paso, es exactamente de lo que tratan los Elementos. :-)
Perdón por intentar inferir sus requisitos en lugar de responder su pregunta directamente, pero me he enfrentado al mismo problema anteriormente y noté que lo que necesitaba no era la Sesión en absoluto, sino la propiedad Artículos en su lugar.