Похоже, вы выполняете обратную передачу на ту же страницу, а затем вставляете ее в базу данных перед повторным отображением той же страницы пользователю без кнопки отправки?
В этом случае самый простой способ решить вашу проблему - выполнить Response.Redirect()
на той же странице, поэтому, когда пользователь нажимает F5, он перезагружает запрос GET на страницу вместо POST.
Объяснение:
Когда вы выполняете обратную передачу в ASP.NET, браузер отправляет запрос POST на сервер. Я не знаю вашего опыта работы с методами HTTP, но даже если вы новичок в веб-программировании, вы, вероятно, испытали влияние этих типов запросов в браузерах. Иногда, когда вы отправляете формы на веб-сайтах и нажимаете кнопку «Назад», он говорит что-то вроде того, хотите ли вы повторно отправить данные формы. Это связано с тем, что эти формы отправляют данные на сервер с помощью метода HTTP POST. Эффект кнопки «Назад» в этом случае такой же, как и при нажатии F5 - браузер снова повторяет тот же самый запрос POST (что требует некоторого типа данных формы, и в этих случаях это те же данные, которые вы отправили последним время).
Когда вы используете Response.Redirect()
, сервер выдает код состояния HTTP 302 (ресурс временно перемещен) в ответ на запрос. Затем браузер отправит запрос GET для ресурса, на который ему было велено перенаправить (в данном случае, на ту же самую страницу).
Теперь, когда вы находитесь на странице, она возвращается, как если бы вы перешли на нее по ссылке или набрали ее прямо в адресной строке. Если на этот раз вы нажмете F5, будет выдан запрос GET, а не POST.
Я бы порекомендовал вам загрузить Firebug и активировать панель Net. Вы можете точно увидеть, что составляет запрос / ответ, а также список всех запросов, сделанных на вашей странице.
Дополнительные ресурсы:
Если вы любите приключения, вы можете проверить еще больше кодов статуса (и, кстати, у меня на самом деле использовал 418 в приложении, над которым я работаю, как взлом, чтобы обойти проверку подлинности с помощью форм для ASP.NET).
Если Firebug недостаточно, вы можете загрузить Fiddler и фактически обрабатывать и воспроизводить запросы по своему вкусу.
Если вам недостаточно GET и POST, вы можете использовать другие методы для изменения состояний в вашем приложении. Возможно, вы слышали о архитектуре RESTful, которая в основном использует HTTP-методы GET, PUT, POST и УДАЛИТЬ, как они были задуманы.
person
John Rasch
schedule
26.03.2010