Подтвердить что ты не робот

Обнаруживать, является ли действие методом POST или GET

В MVC 3 можно ли определить, является ли действие результатом метода POST или GET? Я знаю, что вы можете украсить действия с помощью [HttpPost] и [HttpGet], чтобы запустить конкретное действие, если произойдет одно из этих действий. Я бы хотел оставить эти атрибуты и программно определить, какой из них вызвал действие.

Причина в том, что из-за того, что моя страница поиска архивирована, я сохраняю модель поиска в TempData. Первоначальный поиск вызывает POST на странице результатов поиска, но ссылки подкачки - это всего лишь ссылки на "/results/2" (для страницы 2). Они исследуют TempData, чтобы увидеть, есть ли в ней модель, если это так.

Это вызывает проблемы, когда кто-то использует кнопку "Назад", чтобы перейти в форму поиска и повторно отправить ее. Он по-прежнему поднимает модель в TempData вместо использования новых критериев поиска. Поэтому, если это POST (т.е. Кто-то просто отправил форму поиска), я хочу сначала очистить TempData.

4b9b3361

Ответ 1

Свойство HttpMethod объекта HttpRequest получит его для вас. Вы можете просто использовать:

if (HttpContext.Current.Request.HttpMethod == "POST")
{
    // The action is a POST.
}

Или вы можете получить объект Request прямо сейчас от текущего контроллера. Это просто свойство.

Ответ 2

Лучше сравнивать его со свойством HttpMethod а не со строкой. HttpMethod доступен в следующем пространстве имен:

using System.Net.Http;

if (HttpContext.Request.Method == HttpMethod.Post.Method)
 {
 // The action is a post
 }