2012-06-14 2 views
1

Я хочу, чтобы кто-то посетил мой интернационализированный сайт, чтобы иметь возможность изменить язык. Я думал, что лучший способ - сохранить язык, выбранный в файле cookie, - поэтому, когда страница загружается, он может найти предпочтительный язык в cookie.Чтение cookie в C#

Написание файла cookie идет идеально, однако я постоянно сталкиваюсь с ошибками, пытаясь его прочитать. Поскольку я новичок в C# im, у меня проблемы с переводом ошибок, которые визуальная студия бросает на меня.

Я хочу, чтобы значение cookie называлось «UserSettings» в строке с именем lang. Я стараюсь, как это:

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

Ошибка он бросает это:

Ссылка на объект не указывает на экземпляр объекта

Я имею в виду проблему должен быть в правой части инструкции, так как я инициализирую строку слева.

Я также попытался сделать экземпляр куки, делая

HttpCookie cookie = Request.Cookies["UserSettings"].Value; 

но Visual Studio не любит это вообще.

Что я делаю неправильно? Должен ли я сделать экземпляр объекта Request? Любая помощь будет оценена по достоинству.

Я следую различным учебникам по этой теме, но все они приводят к этой же ошибке.

EDIT: Я заметил, что я имел

HttpCookie cookie = Request.Cookies["UserSettings"].Value; 

Я изменил его:

HttpCookie cookie = Request.Cookies["UserSettings"]; 

но не повезло, он все еще не работал.

EDIT: это как мой печенье сделан

public void Application_BeginRequest() 
    { 
     myCookie = new HttpCookie("UserSettings"); 
     myCookie.Value = "nl"; 
     myCookie.Expires = DateTime.Now.AddDays(1); 
     Response.Cookies.Add(myCookie); 
     hc = new HomeController(); 
    } 

Мой печенье 100% там, им Absolutly уверен, что я могу видеть его в Firefox-веб-разработчика.

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

EDIT ли это поможет? asp.net mvc can't access cookie data in base controller

+0

, что результаты, которые я ту же ошибку, так как я знаю, что печенье является 100% там, это может быть путь вещь ? – DeadManWalking

+0

Как вы добавляете cookie? – theedam

+0

добавил, что информация по моему вопросу – DeadManWalking

0

прежде всего проверка на наличие cookie создается или нет.
для этого использования firefox и добавить плагин webdeveloper
После установки webdeveloper в браузере Firefox появится панель инструментов, выберите вкладку cookie на нем
cookie -> Посмотреть информацию о файлах cookie будет отображать все файлы cookie с их свойствами.

+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. 
} 

Чтобы установить кук:

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() и добавьте результаты в Response. Он будет создан только на стороне клиента после ответ был отправлен обратно.

Но вы читаете значение куки из Request состояния, возможно, оригинальный запрос , прежде чем ответ с куки был отправлен обратно клиенту? В это время в течение жизненного цикла, однако, этот файл cookie не содержится в Request и, следовательно, null.

Ваш клиент должен будет отправить другой запрос после cookie был создан, чтобы сделать его доступным для сервера, и это имеет для меня смысл.

Причина, по которой вы можете видеть файл cookie в своих инструментах веб-разработчика, заключается в том, что сервер отправит Response обратно клиенту. Однако он не будет присутствовать в текущем состоянии Request, если только новый запрос с файлом cookie не будет отправлен клиентом.

0

Попробуйте установить cookie.Path = "/";

Перед тем, как добавить файл cookie.

0

Чтобы установить куки значение:

HttpCookie Userinfo= new HttpCookie("Userinfo"); 
Userinfo["Username"] = application.username.ToString(); 
Response.Cookies.Add(Userinfo); 

Чтобы получить печенье значение:

HttpCookie reqUserinfocookies = Request.Cookies["Userinfo"]; 
if (reqUserinfocookies != null) 
{ 
string username = reqBTListcookies["username"]; 
} 
Смежные вопросы