2012-06-14 60 views
1

我想要訪問我的國際化網站的人能夠更改語言。我認爲最好的方法是將選擇的語言存儲在cookie中 - 所以當頁面加載時,它可以在cookie中查找首選語言。在c中讀取cookie#

寫入cookie會變得很完美,但是我仍然遇到嘗試讀取它的錯誤。 因爲我是新來的C#即時通訊有麻煩翻譯錯誤視覺工作室引發我。

我想要一個稱爲'UserSettings'的cookie名爲lang的字符串的值。我想是這樣的:

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

它拋出的錯誤:

對象引用不設置到對象的實例

我想這個問題有在語句的右側,因爲我正在初始化左側的字符串。

我也試圖通過做

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開發人員。

UPDATE:這是確切的代碼我現在打電話

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

這樣我的代碼編譯,如果我取消我的代碼,那麼就行得(誤差@此方法的第一行)

回答

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

+0

導致我同樣的錯誤,因爲我知道cookie是100%在那裏,它可以是一個路徑的事情? – DeadManWalking

+0

你如何添加cookie? – theedam

+0

添加了這個信息到我的問題 – DeadManWalking

0

首先檢查cookie的創建與否。
爲此使用firefox並添加webdeveloper插件
安裝webdeveloper後,Firefox瀏覽器上出現一個工具欄,選擇它的cookies選項卡
cookies - >查看Cookies信息,它將顯示所有的cookies及其屬性。

+0

我有webdeveloper插件,和cookie是100 % 那裏。可能是路徑問題? – DeadManWalking

+0

@DeadManWalking展示你的代碼。這可能是其他問題 – vikrantx

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

+0

我的問題說我確定cookie是存在的..... – DeadManWalking

+0

對不起,沒有看到問題更新。 – jaypeagi

+2

取消註釋代碼時會出現什麼錯誤?您是否檢查請求不可用的cookie? – jaypeagi

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

您在Application_BeginRequest()創建的cookie和將結果添加到Response。它將在之後在客戶端創建僅響應已被髮回。

但是您正在從Request狀態讀取cookie值,也許原始請求之前與cookie的響應已發送回客戶端?此時在生命週期內,此cookie不包含在Request中,因此爲null

您的客戶必須在之後發送另一個請求該cookie已創建,以使其可用於服務器,這對我來說非常合適。

您可以在您的Web開發人員工具中看到Cookie的原因是,服務器會將Response發送回客戶端。但是,它不會出現在當前的Request狀態中,除非客戶端將發送帶有cookie的新請求。

0

嘗試設置cookie.Path =「/」;

添加cookie之前。

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