MVC3 Redirect после входа в систему - PullRequest
4 голосов
/ 23 июня 2011

Попытка собрать страницу входа в систему mvc, которая будет перенаправлять обратно на исходную страницу, для которой требовалась авторизация на основе других сообщений переполнения стека.

Перенаправление с

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
  filterContext.Result = new RedirectToRouteResult(
                             new RouteValueDictionary 
                               {
                                   { "action", "login" },
                                   {"ReturnUrl", filterContext.HttpContext.Request.RawUrl},
                                   { "controller", "mycontroller" }
                               });
}

просмотр страницы входа имеет

@Html.Hidden("returnUrl", ViewContext.HttpContext.Request.Params["returnurl"])

находится внутри формы. Первоначально я использовал ViewContext.HttpContext.Request.Url.PathAndQuery, основанный на другом сообщении на форуме, но это включало весь URL.

Внутри контроллера у меня

[HttpPost]
public ActionResult Login(MyModel model)
{
   if (loginisValid)
      return Redirect(model.ReturnUrl);
   else
      return View();
}

но это ничего не делает, только возвращает оригинальную страницу, даже если она попадает в Redirect. Я также пробовал RedirectToAction и RedirectToRoute, но они дают ошибки. Я тестирую это на моей странице индекса, которая находится по адресу localhost / admin / mycontroller. Таким образом, model.ReturnUrl в настоящее время содержит «/ admin / mycontroller». Что я должен изменить, чтобы сделать эту работу?

Ответы [ 2 ]

2 голосов
/ 25 июня 2011

Оказалось, весь этот код был правильным. Однако я не ставил

[RequireHttps(Order=0)] 

поверх моего контроллера, поэтому он никогда не сохранял файлы cookie правильно, а после перенаправления обратно на мою индексную страницу снова не проходил авторизацию.

0 голосов
/ 23 июня 2011

Я использую проверку подлинности с помощью форм, но использую эту строку.

Response.Redirect (! String.IsNullOrEmpty (returnUrl)? ReturnUrl: FormsAuthentication.DefaultUrl);

...