在c#中读取cookie

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

编写cookie是完美的,但是我一直在尝试阅读它时遇到错误。 由于我是C#的新手,我在翻译错误时遇到了麻烦,视觉工作室向我投掷。

我想在名为lang的字符串中使用名为’UserSettings’的cookie的值。 我这样想:

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

但没有运气,它仍然无法正常工作。

编辑:这是我的cookie的制作方式

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

这样我的代码编译,如果我取消注释我的代码然后它doest(错误@此方法的第一行)

听起来好像从未设置过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

你能试试吗?

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

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

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

您在Application_BeginRequest()创建cookie并将结果添加到Response 。 只有回复响应 ,才会客户端创建它。

但是您正在从Request状态读取cookie值,也许是在将cookie响应发送回客户端之前的原始请求? 但是在生命周期内的这个时间点,此cookie不包含在Request ,因此为null

在创建cookie 之后 ,您的客户端必须发送另一个请求,以便将其提供给服务器,这对我来说非常有意义。

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

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

 HttpCookie myCookie = new HttpCookie("UserSettings"); myCookie = Request.Cookies["UserSettings"]; string lang = myCookie.Value.ToString(); 

尝试设置cookie.Path =“/”;

在添加cookie之前。

设置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 = reqBTListcookies["username"]; }