Как ошибки на стороне сервера обрабатываются в шаблоне Post/Redirect/Get?

StackOverflow https://stackoverflow.com/questions/599086

  •  11-09-2019
  •  | 
  •  

Вопрос

Для успешного варианта использования, рабочее время POST/перенаправление/GET (PRG) довольно прост: просто перенаправить (клиентскую сторону) на нужную страницу. Но как насчет случаев, когда ошибки встречаются во время проверки на стороне сервера, и мы хотим сохранить входы, когда мы снова отображаем входную страницу?

Насколько я могу судить, существует два подхода: просто повторно повторно повторно вводится входной страницей после подачи после формы (то есть без перенаправления) во время ошибок (тем самым игнорируя шаблон PRG); или, перенаправить на страницу ввода и сохранить предыдущие входы где -нибудь, где их можно получить позже (например, сеанс), во время рендеринга. У обоих есть недостатки: во -первых, нам представлены проблемы PRG Pattern помогает нам избежать (например, закладка, двойная подчинение); Второй подход приводит к непоследовательному получению (сначала Get найдет хранимые входные данные, последующие получения могут не). Есть ли другие альтернативы, упомянутые здесь? Я надеюсь на входные данные сообщества о том, как этот случай лучше всего обрабатывается.

Это было полезно?

Решение

Обычно я делаю это первым способом, который вы описываете - снимайте только в случае успешного представления. Трудно увидеть реальный вариант использования для закладки формы, содержащей неверные данные; С другой стороны, часто имеет смысл добавить в закладки страницу подтверждения (после успешной отправки).

Другие советы

Если URL -адрес используется для заполнения формы, является той, в которой публикуется форма, я не думаю, что есть проблема. Если ввод действителен, перенаправить и получить. Если это недействительно, повторно воспроизводите заполненную форму. Таким образом, взаимодействие выглядит как:

GET  /your-url => blank form
POST /your-url (success) => Redirect => GET /success-url
POST /your-url (failure) => filled-in form

Упомянутая проблема в закладке влияет на оба подхода, вы не можете по -настоящему добавить в закладки то, что опирается на некоторые временные данные, сохранившиеся на сервере.

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

Таким образом, PRG только об успехе - очень чистый подход.

Как говорят другие ответы, используйте только шаблон Post/перенаправить/получить успешную проверку на стороне сервера. Когда форма недействительна, просто ответьте на ответ напрямую, с сообщениями об ошибках.

Для удобства использования вы должны убедиться, что Валидация на стороне клиента отличная, Это хорошая идея в любом случае, так как пользователям нравится немедленная обратная связь. Используйте JavaScript или Новые функции формы HTML5, такой как required атрибут или maxlength атрибут или type="email" атрибут и так далее.

Конечно, У вас все еще должна быть проверка на стороне сервера для безопасности и для изящной деградации.

Если вы используете ASP.NET MVC, то есть еще один метод, который можно использовать для ситуации с неудачей Post ->. Это освещено в #13 этой статьи: Лучшие практики ASP.NET MVC (часть 1).

Если вы реализуете этот метод, вы можете всегда перенаправить после поста, даже если пост привел к неудаче.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top