wake-up-neo.net

Response.Redirect die POST-Daten an eine andere URL in ASP.NET

Ich möchte eine Antwort an eine andere URL umleiten, während sie einige POST -Daten in ihrem HTTP-Header enthält.

// Inside an ASP.NET page code behind:
Response.Redirect("http://www.example.com/?data=sent%20via%20GET");
// This will sent data to http://www.example.com via GET.
// I want to POST this data to http://www.example.com instead.

Wie mache ich das in ASP.NET?

15
Xaqron

sie können riesige Daten auch mit diesem Trick senden.

Response.Clear();

StringBuilder sb = new StringBuilder();
sb.Append("<html>");
sb.AppendFormat(@"<body onload='document.forms[""form""].submit()'>");
sb.AppendFormat("<form name='form' action='{0}' method='post'>",postbackUrl);
sb.AppendFormat("<input type='hidden' name='id' value='{0}'>", id);
// Other params go here
sb.Append("</form>");
sb.Append("</body>");
sb.Append("</html>");

Response.Write(sb.ToString());

Response.End();

Sie können POST nicht mit einer Weiterleitung verwenden. Definitionsgemäß bedeutet eine Umleitung, dass der Server einen Umleitungs-HTTP-Statuscode an den Client mit dem neuen Standort sendet, sodass der Client eine GET-Anforderung an diesen neuen Standort ausgibt. So funktioniert das HTTP-Protokoll, und Sie können nichts dagegen tun. 

Eine Möglichkeit, dies zu erreichen, wäre eine Weiterleitung zu einer temporären Seite, die einen <form> mit method="POST" enthält und die Werte enthält, die Sie als ausgeblendete Felder senden möchten. Dann können Sie Javascript verwenden, um dieses Formular automatisch zu übermitteln.

12
Darin Dimitrov

Mit viewstate können Sie die Daten "übertragen" und auf einer neuen Seite oder sogar auf derselben Seite lesen.

0
Idan Shechter

Obwohl es ein ziemlich alter Thread ist, dachte ich, ich würde sagen, wie ich es mache.

Angenommen, das Senden der Seite ist a.aspx und die Zielseite ist b.aspx.

  1. Sammeln Sie Benutzereingaben in a.aspx. Der Benutzer klickt auf die Schaltfläche "Senden", wodurch ein Postback ausgelöst wird.
  2. in Button_click-Ereignis von a.aspx werden Volumendaten verarbeitet (z. B. hochgeladene Binärdateien speichern). Bestimmen Sie den Link der Volume-Daten und hängen Sie diesen an das Ende der request.form name-value-Zeichenfolge an.
  3. Verschlüsseln Sie die endgültige Name-Wert-Zeichenfolge und setzen Sie sie auf ein Cookie.
  4. Umleiten zu b.aspx
  5. rufen Sie in b.aspx das Cookie ab, entschlüsseln Sie und Sie erhalten alle Name-Wert-Paare. Verarbeiten Sie sie jetzt wie gewohnt.

Vorteile: (A) b.aspx wird in der Adressleiste des Browsers angezeigt. Es geht in die Geschichte des Browsers ein. Server.transfer tun dies. (B) Es gibt Post-Effekt. Benutzer können das Name-Wert-Paar in Abfragenzeichenfolge nicht sehen.

0
Kish