2011-05-06 3 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 요청을 사용하는 것이 부분적입니다. 북 마킹, 페이징 및 기타 문제를 다루기가 훨씬 쉽습니다. –

+1

빠른 응답을 보내 주셔서 감사합니다. 나는 그렇게했을 것입니다. 그러나 검색 폼은 많은 콤보 박스 (여러 선택 등)로 상당히 복잡합니다. 실제로 최대 쿼리 문자열 길이를 초과하는 것은 매우 쉽습니다. – Scott

관련 문제