2009-08-24 10 views
5

Dies verwendet ASP.NET 2.0 in einer IIS 6-Welt.Kann ich den Wert eines POST-Werts ohne erneute POST ändern?

Ich habe einen Benutzer senden ein Formular, das die Daten über POST sendet. Die Seite, die die Daten empfängt, führt einige einfache Validierungen durch. Wenn die Validierung erfolgreich ist, wird eine Black-Box-Code-Routine ausgeführt, die die Daten mit Request.Form ("NameHere") liest.

Ich möchte in der Lage sein, den Wert des POST-Elements zu ändern und es dann wieder auf dem POST zu setzen. Ich habe nicht die Fähigkeit, den Code zu ändern, der das Request.Form ("NameHere") liest, so dass meine Arbeit um Idee ist, die Daten während des Ladeereignisses der Seite zu ändern. Wenn ich den Wert des POST-Elements ändere, muss der Black-Box-Code nicht geändert werden.

Ist es möglich, den Wert eines Elements auf dem HTTP POST zu ändern?

Hat jemand das getan?

Danke!

+0

Es tut uns leid, dass keiner die Antwort auf die Antwort gesetzt hat. Mein Projekt hat sich geändert und ich kann mir keine Zeit erlauben, die vorgestellten Lösungen zu überprüfen. Ich weiß es wirklich zu schätzen, dass Sie sich Zeit genommen haben, nicht nur mir, sondern auch den zukünftigen Menschen zu helfen, die diese Frage mit Antworten suchen und finden. – MADCookie

Antwort

12

Obwohl es ein bisschen hacky ist, gibt es eine Möglichkeit, den Wert einer POST-Variablen zu ändern.

Wir können Reflection verwenden, um die Request.Form Sammlung als non-readonly zu markieren, den Wert zu ändern, was wir wollen, und ihn wieder als readonly zu markieren (damit andere Leute die Werte nicht ändern können). Verwenden Sie die folgende Funktion:

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[] { }); 
} 

ich den Code auf meinem Rechner getestet und es funktioniert gut. Ich kann jedoch keine Leistungs- oder Portabilitätsgarantien geben.

+0

Ich würde nicht empfehlen, Formulardaten zu ändern, wie es super hacky :), aber +1, wie dies eine gute Technik zu wissen ist und wo sonst wo verwendet werden kann. – user961954

+0

Dies hat meinen Speck gerettet - ich musste in den QueryString einfügen, um ein neues Front-End einer Methode zu setzen, die eine gültige HttpResposne erwartet, die Eingaben als QueryString enthält. –

1

ich sehe als die einzige Möglichkeit, das ursprüngliche POST-Ziel zu Ihrem eigenen zu ändern und dann in Ihrem Code alle Anfragen, die an Ihre Adresse gehen, an die Black-Box-Adresse gesendet werden.

gibt es einige Overhead durch diese obwohl.

Soweit ich mich erinnere, ist die Formularsammlung nicht änderbar, oder? erinnere mich nicht an die genaue Struktur, aber ich denke, dass

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

wird nicht funktionieren.

Grüße

2

Die aktuelle POST kann nicht geändert werden, aber Sie könnten eine neue POST-Anfrage erstellen und zu dem umgeleitet werden.

Verwandte Themen