C# 无法读取cookie

C# 无法读取cookie,c#,asp.net,cookies,culture,C#,Asp.net,Cookies,Culture,我在我的网站上使用asp.net文化以不同的语言显示网站,即荷兰语(nl)和法语(fr)。该站点有一个按钮,通过将?lang=nl添加到该站点的url,将该站点更改为另一种语言。更改语言时,会保存cookie,以便下次访问时保留该语言 由于某些原因,该站点将看不到cookie。cookie就在那里,并被发送到服务器,我与fiddler进行了检查。有时其值为null,有时为空字符串 这是我在basepage类中使用的代码: protected override void InitializeCul

我在我的网站上使用asp.net文化以不同的语言显示网站,即荷兰语(nl)和法语(fr)。该站点有一个按钮,通过将?lang=nl添加到该站点的url,将该站点更改为另一种语言。更改语言时,会保存cookie,以便下次访问时保留该语言

由于某些原因,该站点将看不到cookie。cookie就在那里,并被发送到服务器,我与fiddler进行了检查。有时其值为null,有时为空字符串

这是我在basepage类中使用的代码:

protected override void InitializeCulture()
{
    if (!Page.IsPostBack)
    {
        string cookieLang = "";

        try
        {
            cookieLang = HttpContext.Current.Request.Cookies["UserSettings"]["lang"];
        }
        catch (Exception e)
        {
            Response.Write(string.Format("<!-- {0} -->", e.Message));
        }

        if (!string.IsNullOrEmpty(Request.QueryString["lang"]))
        {
            cookieLang = Request.QueryString["lang"].ToLower();
        }

        if (!string.IsNullOrEmpty(cookieLang))
        {
            string selectedCulture = cookieLang == "fr" ? "fr-BE" : "nl-BE";

            this.Lang = cookieLang;

            UICulture = selectedCulture;
            Culture = selectedCulture;

            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedCulture);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedCulture);


            Response.Cookies["UserSettings"]["­lang"]= Lang;
            Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(7);
        }


        base.InitializeCulture();
    }
}
protectedoverride void InitializeCulture()
{
如果(!Page.IsPostBack)
{
字符串cookieLang=“”;
尝试
{
cookieLang=HttpContext.Current.Request.Cookies[“UserSettings”][“lang”];
}
捕获(例外e)
{
Write(string.Format(“,e.Message));
}
如果(!string.IsNullOrEmpty(Request.QueryString[“lang”]))
{
cookieLang=Request.QueryString[“lang”].ToLower();
}
如果(!string.IsNullOrEmpty(cookieLang))
{
字符串selectedCulture=cookieLang==“fr”?“fr BE”:“nl BE”;
this.Lang=cookieLang;
UICulture=选定的文化;
文化=选择的文化;
Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture(selectedCulture);
Thread.CurrentThread.CurrentUICulture=新文化信息(selectedCulture);
响应。Cookies[“UserSettings”][“…lang”]=lang;
Response.Cookies[“UserSettings”].Expires=DateTime.Now.AddDays(7);
}
base.InitializeCulture();
}
}
有人能告诉我我做错了什么吗

编辑:
当我在本地pc上测试时,我忘了告诉你这段代码可以正常工作,但在服务器上部署时它不工作。

我认为你的错误在于如何处理cookie和事件顺序

  • 步骤1:尝试从cookie中获取区域性名称。如果它存在,请记住它
  • 步骤2:尝试从查询字符串中获取区域性名称。如果它存在,请记住它
  • 步骤3:基于上一步设置当前区域性
  • 步骤4:在cookie中保存区域性名称
以下代码始终适用于我:

protected override void InitializeCulture()
{
    var cultureName = string.Empty;

    // Step 1
    var cookie = this.Request.Cookies["culture"];

    if (cookie != null)
    {
        cultureName = cookie.Value;
    }

    // Step 2
    var query = this.Request.QueryString["culture"];

    if (query != null)
    {
        cultureName = query;
    }

    // Step 3
    var culture = new CultureInfo(cultureName);

    Thread.CurrentThread.CurrentCulture = culture;
    Thread.CurrentThread.CurrentUICulture = culture;

    // Step 4
    this.Response.Cookies["culture"].Value = culture.Name;

    base.InitializeCulture();
}

由于您的代码在本地服务器上工作,而不是在部署的服务器上工作,因此您还可以检查以下事项

  • 检查是否相对指定了区域性文件的路径
  • 然后初始化区域性以在cookie中加载适当的区域性信息
  • 希望这有帮助,
    谢谢。

    我在web.config中使用url重写。这可能与此有关吗?当我在url中使用参数时,区域性切换确实起作用。问题是饼干总是空的。我确信顺序是正确的。你的代码破坏了整个页面。我的代码中有一个错误(我在最后设置的cookie的名称是错误的)。