Определить, является ли действие методом POST или GET - PullRequest
39 голосов
/ 06 мая 2011

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

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

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

Ответы [ 2 ]

76 голосов
/ 06 мая 2011

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

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

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

5 голосов
/ 09 января 2019

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

using System.Net.Http;

if (HttpContext.Request.HttpMethod == HttpMethod.Post.Method)
 {
 // The action is a post
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...