2011-05-06 25 views
28

En MVC 3, ¿es posible determinar si una acción es el resultado de un método POST o GET? Sé que puedes decorar las acciones con [HttpPost] y [HttpGet] para disparar una acción específica si sucede una de ellas. Lo que me gustaría hacer es dejar esos atributos y determinar programáticamente cuál causó la acción.Detectar si la acción es un método POST o GET

La razón es que, debido a la forma en que está estructurada mi página de búsqueda, estoy almacenando el modelo de búsqueda en TempData. La búsqueda inicial causa una POST a la página de resultados de búsqueda, pero los enlaces de búsqueda son todos enlaces a "/ resultados/2" (para la página 2). Examinan TempData para ver si el modelo está allí y utilícenlo si es así.

Esto causa problemas cuando alguien usa el botón Atrás para ir al formulario de búsqueda y volver a enviarlo. Todavía está recogiendo el modelo en TempData en lugar de usar los nuevos criterios de búsqueda. Entonces, si se trata de un POST (es decir, alguien acaba de enviar el formulario de búsqueda), primero quiero borrar TempData.

Respuesta

57

La propiedad HttpMethod en el objeto HttpRequest lo recibirá por usted. Usted sólo puede usar:

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

O puede obtener el objeto Request directamente fuera del regulador de corriente. Es solo una propiedad.

+0

Por lo que vale, también soy partidario de usar siempre solicitudes GET para buscar y simplemente poner todos mis parámetros en la cadena de consulta. Hace marcadores, páginas y otros temas mucho más fáciles de tratar. –

+1

Gracias por la respuesta rápida. Lo habría hecho, pero el formulario de búsqueda es bastante complejo con muchos cuadros combinados (selecciones múltiples, etc.). En realidad, fue bastante fácil exceder la longitud máxima de la cadena de consulta. – Scott

Cuestiones relacionadas