Обнаруживать, является ли действие методом POST или GET
В MVC 3 можно ли определить, является ли действие результатом метода POST или GET? Я знаю, что вы можете украсить действия с помощью [HttpPost] и [HttpGet], чтобы запустить конкретное действие, если произойдет одно из этих действий. Я бы хотел оставить эти атрибуты и программно определить, какой из них вызвал действие.
Причина в том, что из-за того, что моя страница поиска архивирована, я сохраняю модель поиска в TempData. Первоначальный поиск вызывает POST на странице результатов поиска, но ссылки подкачки - это всего лишь ссылки на "/results/2" (для страницы 2). Они исследуют TempData, чтобы увидеть, есть ли в ней модель, если это так.
Это вызывает проблемы, когда кто-то использует кнопку "Назад", чтобы перейти в форму поиска и повторно отправить ее. Он по-прежнему поднимает модель в TempData вместо использования новых критериев поиска. Поэтому, если это POST (т.е. Кто-то просто отправил форму поиска), я хочу сначала очистить TempData.
Ответы
Ответ 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
}