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