在c#中读取cookie

时间:2012-06-14 08:47:22

标签: c# cookies

我希望有人访问我的国际化网站,以便能够更改语言。我认为最好的方法是存储在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(错误@此方法的第一行)

7 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

你能试试吗?

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

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

EDIT 这对你有帮助吗? asp.net mvc can't access cookie data in base controller

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

添加Cookie之前。

答案 6 :(得分:0)

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