Атрибут Authorize не сохраняет данные поста - PullRequest
2 голосов
/ 29 мая 2009

Для сохранения данных поста после использования атрибута [Authorize] в методе контроллера, который затем перенаправляет пользователя на страницу входа, которая затем при успешной аутентификации перенаправляет пользователя туда, куда он намеревался зайти - как бы это будет сделано? Исходная форма отправки не передается по умолчанию. Ответ на предыдущую запись сказал:

Вам необходимо сериализовать значения формы и RedirectUrl в скрытое поле. После аутентификации десериализуйте данные в скрытом поле и перенаправьте на основе значения RedirectUrl. Для этого вам понадобится собственный класс Authorize.

Мой вопрос - есть ли какие-либо примеры, чтобы указать мне правильное направление? Да, я могу добавить тег [Serialize] к классу контроллера, но не могу понять, как может помочь создание пользовательского класса Authorize? Я вижу много материалов в Интернете о создании пользовательского класса Authorize, но где будет выполняться десериализация? Было бы очень полезно, если бы вы могли пройти один или два уровня глубже. Я новичок.

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

1 Ответ

2 голосов
/ 29 мая 2009

Вы можете создать пользовательский атрибут авторизации, в котором сохраненные значения формы будут сохранены в словаре сеансов, а затем после завершения авторизации вы сможете восстановить значения из словаря сеансов.
Вот пример:

public class CustomAuth:AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
      var form = filterContext.HttpContext.Request.Form;
      if (form.HasKeys()) {
       foreach(var key in form.AllKeys)
       {
         filterContext.HttpContext.Session[key]= form[key];
       }
      }
      base.OnAuthorization(filterContext);
    }
}

Как видите, до авторизации все значения формы сохраняются в сеансе.
Теперь после завершения авторизации вы можете восстановить все значения.

[CustomAuth()]
public ActionResult Admin()
{
   // supposing you had a from input with the name "Name"
   string Name = Session["Name"] ?? string.Empty;

   return View();
}
...