HttpContext.Actuel.Session null dans MVC 3
J'ai un bilingue MVC 3 application, j'utilise des cookies de session et de sauver la "Culture" dans Session_start
méthode à l'intérieur d' Global.aspx.cs
fichier, mais direct après, la session est null.
C'est mon code:
protected void Session_Start(object sender, EventArgs e)
{
HttpCookie aCookie = Request.Cookies["MyData"];
if (aCookie == null)
{
Session["MyCulture"] = "de-DE";
aCookie = new HttpCookie("MyData");
//aCookie.Value = Convert.ToString(Session["MyCulture"]);
aCookie["MyLang"] = "de-DE";
aCookie.Expires = System.DateTime.Now.AddDays(21);
Response.Cookies.Add(aCookie);
}
else
{
string s = aCookie["MyLang"];
HttpContext.Current.Session["MyCulture"] = aCookie["MyLang"];
}
}
et la deuxième fois, il va dans la "clause else" parce que le cookie existe, à l'intérieur de mon Filtre, lorsqu'il tente de définir la culture, Session["MyCulture"]
est null.
public void OnActionExecuting(ActionExecutingContext filterContext)
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(HttpContext.Current.Session["MyCulture"].ToString());
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(HttpContext.Current.Session["MyCulture"].ToString());
}
Liés à la question avec la réponse correcte: l'Appel de la Session avant toute Action de Contrôleur est exécuté en MVC @Darin déjà posté cette solution juste à l'ajouter à la référence.
OriginalL'auteur user217648 | 2011-10-09
Vous devez vous connecter pour publier un commentaire.
Pourquoi êtes-vous à l'aide de
HttpContext.Current
dans un ASP.NET application MVC? Jamais l'utiliser. C'est mal, même dans le classique ASP.NET webforms applications, mais dans ASP.NET MVC c'est une catastrophe qui prend tout le plaisir de cette belle framework web.Aussi assurez-vous de tester si la valeur est présente dans la session avant d'essayer de l'utiliser, comme je pense que dans votre cas, il n'est pas
HttpContext.Current.Session
qui est nulle, maisHttpContext.Current.Session["MyCulture"]
. Donc:Alors peut-être la racine de votre problème, c'est que
Session["MyCulture"]
n'est pas correctement initialisé dans leSession_Start
méthode.Vous dites que c'est mal et ne doivent jamais être utilisés. Des soins pour des précisions sur les solutions de rechange?
l'alternative est dans ma réponse:
filterContext.HttpContext.Session
au lieu deHttpContext.Current.Session
.vous dites
HttpContex.Current
est mauvais que dans l'action des filtres? votre réponse de façon plus générale les états "Pourquoi êtes-vous à l'aide deHttpContext.Current
dans un ASP.NET application MVC? Ne jamais l'utiliser."pouvez-vous nous expliquer les pourquoi vous croyez HttpContext.Actuelle est mauvaise - fournir l'alternative est grand, mais vous avez le pouvoir d'aider les autres à mieux comprendre en expliquant la raison de l'alternative...
OriginalL'auteur Darin Dimitrov