7 Stimmen

ASP.Net (C#) Wie POST zu HTTPS von einer HTTP-Seite

C# 3.0 ASP.Net 2.0 IIS6

Ich habe eine normale [non-https] Seite. Auf der Seite befindet sich das standardmäßige ASP.Net-Formular.

Es gibt jedoch zwei "Funktionsbereiche" auf der Seite. Anmeldung und "Angebot anfordern". Die Anmeldeseite muss auf HTTPS POSTen, während der Rest der Seite [einschließlich des "anderen Bereichs"] nicht auf HTTPS basieren kann. In Java [JSP] und normalem Html hätten wir einfach zwei Formulare. Eines, das an HTTPS sendet, und eines, das dies nicht tut.

Wie kann man dies in ASP.Net [von einer Seite aus] handhaben? Ich weiß, dass ich zu einer HTTPS login.aspx Seite verlinken könnte, aber das Unternehmen möchte wirklich den Kontext zusammen.

Irgendwelche Ideen?

Gracias,

3voto

Torfi Punkte 683

Die Lösung besteht darin, asp.net zu verwenden, um ein "seitenübergreifendes Postback" zu spezifizieren, d. h. Sie verwenden die Eigenschaft PostBackUrl eines beliebigen Schaltflächensteuerelements (LinkButton, Button, ImageButton usw.). Mit dieser Eigenschaft können Sie auf jede beliebige Seite zurückkehren. Setzen Sie Ihre PostBackUrl einfach auf die https-Version Ihrer Seite und Sie sind startklar (stellen Sie auch sicher, dass keine URL-Umleitungen aktiv sind, die http auf Ihrer Seite erzwingen).

// ensure we send credentials over a secure connection
if (!HttpContext.Current.Request.IsSecureConnection)
{
     string postbackUrl = HttpContext.Current.Request.Url.AbsoluteUri.Replace("http", "https");
     LinkButton_Login.PostBackUrl = postbackUrl;
}

In Ihrem speziellen Fall sollten Sie eine Ihrer Schaltflächen so einstellen, dass sie zur https-Version und die andere zur http-Version zurückführt (wenn Sie die PostBackUrl nicht angeben, wird standardmäßig die Seite selbst zurückgeführt).

2voto

Ryan Michela Punkte 8004

Sie können zwei Formulare auf einer aspx-Seite haben. Sie können sie nur nicht verschachteln.

Auf einer Seite, die ich erstellt habe, habe ich ein Formular, das auf die Seite zurückgeht, und eines, das zu Google Checkout zurückgeht.

Wenn Sie den Inhalt der Seite mischen müssen, setzen Sie das https-Formular an das Ende der Seite (nach dem Hauptformular-Tag) und füllen es mit versteckten Feldern. Wenn der Benutzer auf eine Schaltfläche klickt, verwenden Sie Javascript, um den versteckten Feldern Werte zuzuweisen, und senden dann das https-Formular.

2voto

Josh Punkte 9876

Sie könnten eine manuelle Post durch Code mit dem HttpWebRequest-Objekt für das Login-Ereignis und schreiben Sie dann die zurückgegebene Antwort zurück in den Stream des Benutzers zu tun.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webRequest.URL);
request.UserAgent = UserAgent;
request.ContentType = ContentType;
request.Method = "POST";

// Write your bytes of the login section here
 Stream oStream = request.GetRequestStream();
 oStream.Write(webRequest.BytesToWrite, 0, webRequest.BytesToWrite.Length);
 oStream.Close();

 // Send the request and get a response
 HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

 // Read the response
 StreamReader sr = new StreamReader(resp.GetResponseStream());

 // return the response to the screen
 string returnedValue = sr.ReadToEnd();

  sr.Close();
  resp.Close();

  Response.Write(returnedValue);

0voto

Chris Cudmore Punkte 28967

Aus Ihrem Kontext schließe ich, dass Sie entweder das eine oder das andere tun, nicht beides gleichzeitig.

Sehen Sie sich die PostbackURL der Schaltflächenobjekte an.
kann die Login-Schaltfläche zu "" zurückkehren. https://secure.login.com "

Die andere Schaltfläche kann einfach zur Seite selbst zurückkehren.

Das Problem dabei ist, dass Sie die Anmeldefelder immer noch an die unsichere Seite zurücksenden, was bedeutet, dass sie nicht verschlüsselt sind und ausgespäht werden könnten.

Die schnelle und schmutzige Lösung wäre, dass Javascript die Login-Felder vor dem Absenden löscht, wenn die Schaltfläche "Angebot anfordern" gedrückt wird.

0voto

dkarzon Punkte 7708

Befinden sich die HTTP- und HTTPS-Seiten auf demselben Server / sind sie Teil derselben Anwendung?

Wenn ja, können Sie vielleicht die Methode Server.Transfer() verwenden, um das Formular intakt zu halten, aber auch das HTTPS zu nutzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X