2009-08-24 9 views
5

Esto está usando ASP.NET 2.0 en un mundo de IIS 6.¿Puedo cambiar el valor de un valor POST sin volver a realizar la POST?

Tengo un usuario que envía un formulario que envía los datos a través de POST. La página que recibe los datos hace algunas validaciones simples. Si se aprueba la validación, se ejecuta una rutina de código de caja negra que básicamente lee los datos usando Request.Form ("NameHere").

Me gustaría poder cambiar el valor del elemento POST y luego ponerlo de nuevo en el POST. No tengo la capacidad de modificar el código que lee Request.Form ("NameHere"), por lo que mi idea es modificar los datos durante el evento de carga de la página. Si cambio el valor del elemento POST, entonces el código de la caja negra no tiene que ser modificado.

¿Es posible cambiar el valor de un elemento en HTTP POST?

¿Alguien ha hecho esto?

Gracias!

+0

Disculpa a todos por no configurar uno como LA respuesta. Mi proyecto ha cambiado y no puedo darme tiempo para verificar las soluciones presentadas. Realmente aprecio que te tomes tu tiempo para ayudar no solo a mí, sino también a las personas futuras que buscan y encuentran esta pregunta con respuestas. – MADCookie

Respuesta

12

Aunque es un poco hacky, hay una manera de cambiar el valor de una variable POST.

Podemos usar Reflection para marcar la colección Request.Form como non-readonly, cambie el valor a lo que queremos y márquelo como readonly otra vez (para que otras personas no puedan cambiar los valores). Utilice la siguiente función:

protected void SetFormValue(string key, string value) 
{ 
    var collection = HttpContext.Current.Request.Form; 

    // Get the "IsReadOnly" protected instance property. 
    var propInfo = collection.GetType().GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic); 

    // Mark the collection as NOT "IsReadOnly" 
    propInfo.SetValue(collection, false, new object[] { }); 

    // Change the value of the key. 
    collection[key] = value; 

    // Mark the collection back as "IsReadOnly"  
    propInfo.SetValue(collection, true, new object[] { }); 
} 

He probado el código en mi máquina y funciona bien. Sin embargo, no puedo ofrecer garantías de rendimiento o portabilidad.

+0

No recomendaría cambiar los datos del formulario, ya que es super hacky :), pero +1 ya que esta es una buena técnica para saber y se puede usar en otros lugares. – user961954

+0

Esto ha guardado mi tocino: necesitaba insertarlo en QueryString para poner una nueva interfaz de un método que está esperando una HttpResposne válida que contenga entradas como QueryString. –

1

veo como la única manera de cambiar el destino de POST original al suyo y luego en su código todas las solicitudes que van a su dirección se envían a la dirección de la caja negra.

Sin embargo, hay algo de sobrecarga a través de esto.

por lo que recuerdo, la colección de formularios no se puede modificar, ¿no? No recuerdo la estructura exacta, pero creo que

Request.Form("NameHere") = "newValue" 

no va a funcionar.

respecto

2

la entrada actual no se puede cambiar, sin embargo, se podría crear una nueva solicitud POST y redirigir a eso.

Cuestiones relacionadas