2010-08-05 22 views
7

actualización¿Cómo puedo determinar si una solicitud es el resultado de una devolución de datos?

estoy poniendo en práctica una solución página personalizada de almacenamiento en caché y no quiero que la solicitud se almacena en caché o se recupera de la memoria caché si es en respuesta al envío de un formulario o algún tipo de devolución de datos asp.net .

Estoy tratando de averiguar si la actual HttpRequest es una devolución de datos. ¿Hay alguna forma de hacerlo fuera del contexto de una página u otro control de usuario? En otras palabras, si estoy dentro de un HttpModule, no tengo acceso a this.IsPostBack, pero aún debo determinar si se trata de una devolución de datos.

Además, ¿las devoluciones siempre son solicitudes "Publicar" o está determinado por contener el formulario?

gracias!

+0

¿Podría detallar "fuera del contexto de una página u otro usercontrol"? – Vaibhav

+1

No puede tener una devolución de datos sin una página ASP.NET. De lo contrario, todo lo que tienes es un HTTP POST regular. –

+0

¿Qué significa 'IsPostBack' para usted exactamente? Me gusta, solo cuando los datos se pasan al módulo ... o qué? –

Respuesta

9

Compruebe la propiedad Method del HttpWebRequest. Las devoluciones se deben marcar como POST en el Method.

Además, la forma en que lo hizo en el ASP de la vieja escuela fue verificar los parámetros post-back esperados en el cuerpo del mensaje HTTP (Request.Form). Puede verificar el contenido de la solicitud de datos que se parece al parámetro de devolución de datos. No estoy seguro de con qué objeto exactamente está trabajando, pero si es HttpWebRequest, puede verificar el flujo de solicitud desde el método GetResponseStream() del objeto.

6
if (Request.ServerVariables["REQUEST_METHOD"] == "POST") { 
    // This is a POST 
} 
+0

Ben McCormack tiene una mejor respuesta, pero básicamente lo mismo. – jessegavin

1

Usted puede obtener una referencia a la página actual: Get current System.Web.UI.Page from HttpContext?

entonces usted puede comprobar por la propiedad Page.IsPostBack.

+0

Este es un buen hallazgo y lo voy a votar, pero todavía no funcionará para mí porque estoy ingresando en la tubería antes de que el manejador se asocie con la solicitud y, por lo tanto, HttpContext.Current.Handler siempre es nulo. – Micah

+0

¿Durante qué renglón de página se necesita saber si la página es de devolución o no? – David

3

Un HTTPHandler tendrá acceso al HTTPContext actual. Se usa para verificar algunas propiedades (Request.RequestType, Request.URLReferrer) y decidir manualmente si se trata de un PostBack.

5

La siguiente rutina estática debería poder determinar si la solicitud actual es o no una devolución de datos. Sin embargo, solo funcionará si está ejecutando una página ASPX o un derivado de la misma.

public class PostBackUtility 
{ 
    public static Boolean IsPagePostBack 
    { 
     get 
     { 
      Page pageHandler = HttpContext.Current.CurrentHandler as Page; 
      if (pageHandler == null) return false; 
      return pageHandler.IsPostBack; 
     } 
    } 
} 

también debe señalar que CurrentHandler no puede sin embargo ser inicializado dependiendo de la etapa en el ciclo de vida de la solicitud se intenta evaluar IsPagePostBack. Creo que este método solo será válido entre HttpApplication.PostMapRequestHandler y HttpApplication.ReleaseRequestState.

Cuestiones relacionadas