7

我希望访问我的国际化网站的人能够更改语言。我认为最好的方法是将选择的语言存储在 cookie 中 - 所以当页面加载时,它可以在 cookie 中查找首选语言。

编写 cookie 很完美,但是我在尝试读取它时一直遇到错误。由于我是 C# 新手,我无法翻译 Visual Studio 向我抛出的错误。

我想要一个名为 'UserSettings' 的 cookie 在名为 lang 的字符串中的值。我正在尝试这样:

string lang = Request.Cookies["UserSettings"].Value;

它抛出的错误是:

你调用的对象是空的

我认为问题必须在语句的右侧,因为我正在初始化左侧的字符串。

我也尝试通过做一个cookie实例

HttpCookie cookie = Request.Cookies["UserSettings"].Value;

但视觉工作室根本不喜欢这个。

我究竟做错了什么?我是否必须创建 Request 对象的实例?任何帮助,将不胜感激。

我正在关注关于这个主题的不同教程,但它们都会导致同样的错误。

编辑:我注意到我有

HttpCookie cookie = Request.Cookies["UserSettings"].Value;

我将其更改为:

HttpCookie cookie = Request.Cookies["UserSettings"]; 

但没有运气,它仍然没有工作。

编辑:这就是我的饼干的制作方式

 public void Application_BeginRequest()
    {
        myCookie = new HttpCookie("UserSettings");
        myCookie.Value = "nl";
        myCookie.Expires = DateTime.Now.AddDays(1);
        Response.Cookies.Add(myCookie);
        hc = new HomeController();
    }

我的 cookie 100% 在那里,我绝对确定,我可以在 Firefox-web 开发人员中看到它。

更新:这是我现在调用的确切代码

        public string getLang()
    {
       // HttpCookie aCookie = Request.Cookies["UserSettings"];
       //  string lang = Server.HtmlEncode(aCookie.Value);
       //  if (lang != null)
       // {
       //      currentLanguage = lang;
       //  }
        return currentLanguage;
    }

这样我的代码就可以编译,如果我取消注释我的代码,那么它就会编译(错误@此方法的第一行)

4

7 回答 7

8

听起来cookie从未被设置。在这种情况下,您需要检查:

HttpCookie aCookie = Request.Cookies["UserSettings"];
if(aCookie != null) {
     object userSettings = aCookie.Value;
} else {
     //Cookie not set.
}

要设置 cookie:

HttpCookie cookie = new HttpCookie("UserSettings");

cookie["UserSettings"] = myUserSettingsObject;
cookie.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(cookie);

这是一篇好文章:http ://www.java2s.com/Code/ASP/Session-Cookie/CreateandretrieveCookiedataC.htm

于 2012-06-14T09:09:20.940 回答
6

你能试试这个吗?

HttpCookie aCookie = Request.Cookies["UserSettings"];
string lang = Server.HtmlEncode(aCookie.Value);

http://msdn.microsoft.com/en-us/library/ms178194.aspx

编辑这对你有帮助吗? asp.net mvc 无法访问基本控制器中的 cookie 数据

于 2012-06-14T08:51:31.920 回答
1

您在其中创建 cookieApplication_BeginRequest()并将结果添加到Response. 只有返回响应后才会在客户端创建它。

但是您正在从状态中读取 cookie 值,也许在带有 cookie 的响应之前Request的原始请求已被发送回客户端?然而,在生命周期内的这个时候,这个 cookie 不包含在 中,因此是.Requestnull

您的客户端必须在创建 cookie后发送另一个请求才能使其对服务器可用,这对我来说非常有意义。

您可以在 Web 开发人员工具中看到 cookie 的原因是,服务器将Response返回给客户端。但是,它不会以当前Request状态存在,除非客户端将发送带有 cookie 的新请求。

于 2015-04-12T13:35:27.703 回答
1

设置 cookie 值:

HttpCookie Userinfo= new HttpCookie("Userinfo");
Userinfo["Username"] = application.username.ToString();
Response.Cookies.Add(Userinfo);

要获取 cookie 值:

HttpCookie reqUserinfocookies = Request.Cookies["Userinfo"];
if (reqUserinfocookies != null)
{
string username = reqUserinfocookies["username"];
}
于 2017-07-03T09:29:07.090 回答
0

首先检查是否创建了cookie。
为此,请使用 firefox 并添加 webdeveloper 插件
安装 webdeveloper 后,firefox 浏览器上会出现一个工具栏,选择 cookie 选项卡上的
cookies -> 查看 Cookies 信息它将显示所有 cookie 及其属性。

于 2012-06-14T08:56:10.473 回答
0
HttpCookie myCookie = new HttpCookie("UserSettings");
myCookie = Request.Cookies["UserSettings"];
string lang = myCookie.Value.ToString();
于 2013-12-23T20:22:57.167 回答
0

尝试设置 cookie.Path = "/";

在添加 cookie 之前。

于 2015-12-30T22:06:15.580 回答