Есть ли хороший способ справиться с POST при выходе - PullRequest
0 голосов
/ 31 августа 2011

У меня есть действие Create POST, в котором нет действия GET внутри моего контроллера. В моем AccountController у меня есть действие Login, которое возвращается к ReturnUrl при переходе к запросу. Проблема в том, что, поскольку Create не имеет действия Get, я получаю 404.

У вас есть предложения?

1 Ответ

0 голосов
/ 31 августа 2011
  • Возможно, вы захотите взглянуть на Объяснено: Аутентификация с помощью форм в ASP.NET 2.0 , которая в основном объясняет, как работает аутентификация ASP.Net froms, а затем с помощью отражателя разобрать классы FormsAuthenticationModuleи FormsAuthentication в пространстве имен System.Web.Security в System.Web.dll, чтобы узнать, как работает Аутентификация с помощью форм ASP.Net, и переписать ее для достижения наилучшего эффекта.

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

    1. Создайте случайный ключ, например System.Guid.NewGuid(), извлеките данные поста и сохраните ихвместе с URL-адресом запроса в System.Web.HttpContext.Current.Cache[<key>]
    2. Измените URL-адрес перенаправления с <Path to login page.aspx>?ReturnUrl=<Url> на <Path to login page.aspx?RequestId=<key>
    3. После проверки подлинности перенаправьте в соответствии с кэшированным значением.Если есть какие-либо данные поста, сгенерируйте авто-форму поста (в HTML) и верните ее клиенту, чтобы можно было продолжить исходный запрос.

    System.Web.Security.FormsAuthentication.RedirectToLoginPage и System.Web.Security.FormsAuthentication.GetRedirectUrl, возможно, вынужно отредактировать.Вы можете добавить переменную запроса, используя System.Web.HttpContext.Current.Request

    Это может быть утомительной и деликатной работой, поскольку код Microsoft очень сложен и может оказаться невозможным, если вы не можете получить ни исходный код .Net (я неконечно, если Microsoft все еще предлагает это) или (бесплатную) лицензию Reflector.

  • В качестве альтернативы, вы можете написать собственный IHttpModule, выполнив следующие действия:

    1. Проверяет накаждый запрос, чтобы узнать, является ли это сообщение тем действием, о котором идет речь, и если оно
    2. Извлекает данные публикации, если они не аутентифицированы, и сохраняет данные в переменной Session

    Затем,

    1. Создайте действие get для действия post, которое возвращает страницу автоматической публикации, как в пункте 3 в первом пункте.
    2. Добавьте модуль в ваше приложение.Убедитесь, что он выполняется до FormsAuthenticationModule или не будет работать.

    Вы можете начать с Пошаговое руководство. Создание и регистрация пользовательского модуля HTTP .

    Этот метод может вызвать некоторые проблемы, если пользователь решит сделать несколько публикаций одновременно, так как второй запрос перезапишет данные в Session.

Два вышеупомянутых варианта являются методами непосредственного решения вашей проблемы.Это может быть проще, если вы измените контроллер Post на Get.Вышеуказанные методы не заслуживают внимания, если у вас много страниц с такой же проблемой или вы не хотите экспериментировать с ASP.Net.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...