2013-04-24 2 views
0

Это должно быть достаточно простым, хотя я нахожу, что могу устанавливать только файлы cookie, но не читать их, несмотря на то, что мой браузер показывает мне файл cookie.ASP.NET MVC не может читать куки

В моей HomeController я установить куки, когда пользователь вводит правильную строку:

[HttpPost] 
public ActionResult Index(string fMemberCode) 
{ 
    try 
    { 
     // TODO: controller-->member table module-->member data gateway-->DB 
     // Check member num against member table 
     // Return cookie if exists 
     // Return error if not 
     MembersModule membersModule = new MembersModule(); 
     int memberId = membersModule.AuthMember(fMemberCode); 
     if (memberId > 0) 
     { 
      HttpCookie mCookie = new HttpCookie("MMedia"); 
      mCookie.Value = memberId.ToString(); 
      Response.Cookies.Add(mCookie); 
     } 
     else { } 
     return RedirectToAction("Index"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

Тогда позже, в другом контексте, LibraryController необходимо проверить печенье присутствует:

public LibraryController() 
{ 
    // TODO 
    // Check member cookie present 
    int id = int.Parse(Request.Cookies["Media"].Value); 
    if (id > 0) 
     this.module = new LibraryModule(id); 
    else throw new Exception("Invalid cookie"); 
} 

Однако при переходе по коду в VS2012, когда линия выполнения в LibraryController достигает:

int id = int.Parse(Request.Cookies["Media"].Value); 

Исключение брошено: Object reference not set to an instance of an object

+0

Является ли 'MMedia' опечаткой, когда вы идете ее создать? (по сравнению с «Медиа», когда вы его напомнили) –

+0

Я изменил имя, чтобы быть более подходящим. Проблема все еще остается. – Lee

+0

И вы подтвердили, что файл cookie возвращается пользователю, и пользователь отправляет файл cookie на будущие запросы? (Вы говорите, что браузер показывает вам файл cookie, но не знал, может ли игра «путь» или «домен» играть роль.) –

ответ

6

Вы не можете получить доступ к Request свойства в конструкторе вашего контроллера. Он не существует в этой точке жизненного цикла контроллера.

Возможно, вам может помочь фильтр действия или контроллера.

+0

touché. Наверное, это не помешало, что на него ссылались в ctor. –

+0

Отличное наблюдение. Я забыл, что работал в конструкторе! Вместо этого я разместил его в действии Index LibraryController. – Lee

Смежные вопросы