【问题标题】:Reading cookie in c#在 C# 中读取 cookie
【发布时间】:2019-06-18 17:14:50
【问题描述】:

我希望访问我的国际化网站的人能够更改语言。我认为最好的方法是将选择的语言存储在 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"]; 

但运气不好,还是没用。

编辑:这就是我的 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;
    }

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

【问题讨论】:

    标签: c# cookies


    【解决方案1】:

    听起来 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

    【讨论】:

    • 取消注释代码时出现什么错误?您是否正在检查 Request 不可用的 cookie?
    • 如果是这种情况,试试HttpContext.Current.Request.Cookies
    • 在我的代码中,错误是“对象引用未设置为对象的实例”。当我使用您的最新建议时,它会在“当前”下方添加一条蓝色波浪线。我不知道响应是否可用,因为我对 C# 了解不多,仍然需要大量学习,但如果有帮助,此代码位于 HomeController.cs
    • 什么是空?是请求还是 Cookie?它应该在某处的错误消息中这样说。
    • 但我的猜测是 Request=null
    【解决方案2】:

    你可以试试这个吗?

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

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

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

    【讨论】:

    • 导致我同样的错误,因为我知道 cookie 100% 在那里,它可以是路径吗?
    • 你是如何添加cookie的?
    • 将该信息添加到我的问题中
    • with you're "error @ first line of this method" 究竟是什么错误信息?
    • 空引用异常:对象引用未设置为对象的实例。
    【解决方案3】:

    您在Application_BeginRequest() 中创建您的cookie,并将结果添加到Response。只有在响应被发回之后才会在客户端创建。

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 我有 webdeveloper 插件,cookie 是 100% 的。可能是路径问题?
        【解决方案6】:
        HttpCookie myCookie = new HttpCookie("UserSettings");
        myCookie = Request.Cookies["UserSettings"];
        string lang = myCookie.Value.ToString();
        

        【讨论】:

          【解决方案7】:

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

          在添加 cookie 之前。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-08-22
            • 2016-01-15
            • 1970-01-01
            • 2019-11-09
            • 2011-04-03
            • 1970-01-01
            • 2019-01-05
            相关资源
            最近更新 更多