Где проверить наличие файлов cookie в приложении MVC3? - PullRequest
3 голосов
/ 06 января 2012

У меня есть веб-приложение MVC3, которое эффективно «привязано» к классическому веб-сайту ASP (т. Е. Старые страницы - классическая ASP, новые страницы - ASP.Net MVC).Сайт требует, чтобы пользователь вошел в систему, поэтому для защиты новых страниц MVC я проверяю наличие cookie и использую идентификатор для получения данных сеанса из базы данных, которая была создана классической страницей входа ASP.

Поскольку пользователь может переключаться между старыми и новыми страницами, и я не делюсь данными сеанса между двумя приложениями, я проверяю файлы cookie и извлекаю данные каждый запрос в моем методе действия с именем LogIn:

public PartialViewResult LogIn()
        {
            var cookieId = DecodeCookieId(System.Web.HttpContext.Current.Request.Cookies["cookiename"].Value);

            LoggedInViewModel viewModel = new LoggedInViewModel
            {
                Session = sessionRepository.Sessions.FirstOrDefault(s => s.GGAPSession_ID == cookieId)
            };
            return PartialView(viewModel);
        }

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

Проблема возникает, когда я пытаюсь изменить LogIn (), чтобы проверить наличие cookie и перенаправления, если не найден:

public ActionResult LogIn()
{
   if (System.Web.HttpContext.Current.Request.Cookies["cookiename"] != null)
  {
     //  same method contents as above
  }
  else
  {
    return Redirect("http://localhost/index.asp");
  }
}

Я получаю «Дочерним действиям не разрешено выполнять действия перенаправления»что я понимаю, но как мне обойти это?Должен ли я делать проверку файлов cookie в другом месте?И где я должен делать управление сессиями?

Ответы [ 2 ]

5 голосов
/ 06 января 2012

Описание

Да, вы можете использовать HttpContext.Response.Redirect для решения этой проблемы.

Образец

Изменить

return Redirect("http://localhost/index.asp");

на

HttpContext.Response.Redirect("http://localhost/index.asp");
return EmptyResult();

Дополнительная информация

0 голосов
/ 09 января 2012

Я думаю, что вы можете использовать глобальный фильтр действий на своем сайте mvc для этого. Это общий принцип, изложенный в книге «ASP.NET MVC в действии». Получите ли вы в

OnActionExecuting

если файл cookie существует. в противном случае

filterContext.Result = new RedirectResult("http://localhost/index.asp")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...