tutorialspoint questions net mvc interview for asp answers and asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 global-asax

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.