2011-05-06 35 views
28

在MVC 3中,可以確定操作是POST還是GET方法的結果?我知道你可以用[HttpPost]和[HttpGet]來裝飾動作,如果其中一個發生,就會觸發一個特定的動作。我想要做的是將這些屬性關閉並通過編程確定哪一個引起了操作。檢測操作是POST還是GET方法

原因是,由於我的搜索頁面的架構,我將搜索模型存儲在TempData中。最初的搜索會導致POST到搜索結果頁面,但分頁鏈接都只是「/ results/2」的鏈接(對於第2頁)。他們檢查TempData,看看模型是否在那裏使用。

當有人使用後退按鈕轉到搜索表單並重新提交時,會導致問題。它仍然在TempData中選擇模型,而不是使用新的搜索條件。所以如果它是一個POST(即有人剛剛提交了搜索表單),我想首先清除TempData。

回答

57

HttpRequest對象上的HttpMethod屬性將爲您獲取它。您可以使用:

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

或者您可以直接從當前控制器獲取Request對象。這只是一個財產。

+0

對於它的價值,我也偏向於始終使用GET請求進行搜索,並將所有參數放在查詢字符串中。它使書籤,分頁和其他問題更容易處理。 – 2011-05-06 17:03:43

+1

感謝您的快速響應。我會這樣做,但搜索表單實際上非常複雜,有很多組合框(多選)等。實際上很容易超過最大查詢字符串長度。 – Scott 2011-05-06 17:15:26

相關問題