HttpContext.Current.Session在MVC 3应用程序中为null

时间:2011-10-09 19:01:42

标签: asp.net-mvc-3 session-cookies

我有一个双语MVC 3应用程序,我使用cookie和会话在Session_start文件中的Global.aspx.cs方法中保存“文化”,但在此之后,会话为空。

这是我的代码:

    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"];
        }
 }

第二次进入“else子句”因为cookie存在;在我的过滤器中,当它尝试设置culutre时,Session["MyCulture"]为空。

   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());
    }

1 个答案:

答案 0 :(得分:13)

为什么在ASP.NET MVC应用程序中使用HttpContext.Current从不使用它。即使在经典的ASP.NET webforms应用程序中,这也是邪恶的,但在ASP.NET MVC中,这是一个让这个漂亮的Web框架带来所有乐趣的灾难。

还要确保在尝试使用之前测试会话中是否存在该值,因为我怀疑在您的情况下,HttpContext.Current.Session不是HttpContext.Current.Session["MyCulture"],而是public void OnActionExecuting(ActionExecutingContext filterContext) { var myCulture = filterContext.HttpContext.Session["MyCulture"] as string; if (!string.IsNullOrEmpty(myCulture)) { Thread.CurrentThread.CurrentUICulture = new CultureInfo(myCulture); Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(myCulture); } } 。所以:

Session["MyCulture"]

因此,问题的根源可能是Session_Start方法未正确初始化{{1}}。