【问题标题】:HttpContext.Current.Session is null in MVC 3 applicationHttpContext.Current.Session 在 MVC 3 应用程序中为空
【发布时间】:2011-10-09 19:01:41
【问题描述】:

我有一个双语 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 存在;在我的过滤器中,当它尝试设置文化时,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());
    }

【问题讨论】:

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


【解决方案1】:

为什么在 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 方法中正确初始化。

【讨论】:

  • 非常感谢,是的,问题的根源是 aCookie 不为空,但我无法获得它的值。因为第一次(当我删除浏览器的所有cookie时)并且cookie为空,我没有遇到问题并且会话不为空。
  • 你说它是邪恶的,不应该被使用。想详细说明替代方案吗?
  • @Megacan,我的回答中提供了替代方案:filterContext.HttpContext.Session 而不是 HttpContext.Current.Session
  • @DarinDimitrov,你是说HttpContex.Current 只在动作过滤器中不好?你的回答更广泛地说“你为什么在 ASP.NET MVC 应用程序中使用HttpContext.Current?永远不要使用它。”
  • @DarinDimitrov 您能否解释一下为什么您认为 HttpContext.Current 不好 - 提供替代方案很好,但您有能力通过解释替代的原因...
猜你喜欢
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多