Frage

Was ist der Unterschied zwischen Server.Transfer und Response.Redirect?

  • Welche Vorteile und Nachteile der einzelnen?
  • Wenn Sie ein entsprechende über die anderen?
  • Wenn Sie eines nicht angemessen?
War es hilfreich?

Lösung

Response.Redirect sendet einfach eine Nachricht (HTTP 302) an den Browser nach unten.

Server.Transfer geschieht ohne den Browser etwas zu wissen, die Browser-Anfrage eine Seite, aber der Server liefert den Inhalt eines anderen.

Andere Tipps

Response.Redirect() werden Sie auf eine neue Seite senden, die Adressleiste aktualisieren und an die Browser-Historie hinzufügen. Auf Ihrem Browser können Sie auf zurück.

Server.Transfer() ändert nicht die Adressleiste ein. Sie können nicht zurückschlagen.

I Server.Transfer() verwenden, wenn ich den Benutzer nicht will, um zu sehen, wohin ich gehe. Manchmal auf einem „Laden“ Typ Seite.

Ansonsten werde ich immer Response.Redirect() verwenden.

Um Kurz: Response.Redirect einfach sagt dem Browser eine andere Seite zu besuchen. Server.Transfer hilft Serveranforderungen zu reduzieren, hält die URL gleich und mit einem kleinen Bug-Bashing, können Sie die Query-String und bilden Variablen übertragen.

Etwas, das ich gefunden und stimmen mit ( Quelle ):

  

Server.Transfer ist ähnlich, dass es den Benutzer zu einer anderen Seite sendet   mit einer Aussage wie Server.Transfer("WebForm2.aspx"). Jedoch,   die Aussage, hat eine Reihe von Vorteilen und Nachteilen.

     

Zum einen die Übertragung auf eine andere Seite mit Server.Transfer   schont Server-Ressourcen. Anstatt den Browser zu sagen zu   umleiten, es ist einfach verändert den „Fokus“ auf dem Web-Server und   überträgt die Anfrage. Das bedeutet, bekommt man nicht ganz so viele HTTP   Anfragen kommen durch, die somit den Druck erleichtert auf   Web-Server und macht Ihre Anwendungen schneller laufen.

     

Aber Vorsicht: Da der „Transfer“ Prozess nur arbeiten kann diejenigen,   Websites auf dem Server ausgeführt wird; Sie können nicht Server.Transfer zum Senden   der Benutzer auf eine externe Seite. Nur Response.Redirect kann das tun.

     

Zweitens macht Server.Transfer die ursprüngliche URL im Browser.   Dies kann wirklich Dateneingabetechniken helfen zu rationalisieren, obwohl es kann   macht für Verwirrung beim Debuggen.

     

Das ist nicht alles: Die Server.Transfer Methode hat auch eine zweite   parameter- "PreserveForm". Wenn Sie dies True gesetzt, eine Anweisung   wie Server.Transfer("WebForm2.aspx", True), die vorhandene Abfrage   Variablen String und jede Form noch auf der Seite zur Verfügung stehen Sie   übertragen zu.

     

Zum Beispiel, wenn Ihr WebForm1.aspx ein Textboxsteuerelement namens   TextBox1 und Sie übertragen WebForm2.aspx mit dem PreserveForm   Parameter auf True gesetzt, würden Sie in der Lage sein, den Wert der abrufen   Originalseite Boxsteuerelement Text durch Bezugnahme auf   Request.Form("TextBox1").

Response.Redirect() verwendet werden soll, wenn:

  • wollen wir die Anfrage an einigen einfachen HTML-Seiten auf unserem Server oder auf einen anderen Web-Server
  • umleiten
  • wir kümmern uns nicht um verursacht zusätzliche Roundtrips zum Server bei jeder Anfrage
  • wir brauchen keine Abfrage-Zeichenfolge und Formularvariablen von der ursprünglichen Anfrage
  • zu erhalten
  • wir wollen, dass unsere Benutzer in der Lage sein, die neue umgeleiteten URL zu sehen, wo er in seinem Browser umgeleitet wird (und Lesezeichen kann es, wenn sein erforderlich)

Server.Transfer() verwendet werden soll, wenn:

  • wollen wir aktuelle Seite Anfrage an eine andere ASPX-Seite auf dem gleichen Server
  • übertragen
  • wir wollen Server-Ressourcen erhalten und die unnötigen Roundtrips zum Server vermeiden
  • wollen wir Abfrage-Zeichenfolge und Formularvariablen (optional)
  • erhalten
  • wir brauchen nicht die reale URL zu zeigen, wo wir die Anfrage in dem Benutzer Web-Browser
  • umgeleitet

Response.Redirect umleitet Seite auf eine andere Seite nach ersten Seite kommt zum Client. So Client kennt die Umleitung.

Server.Transfer beendet aktuelle Ausführung der Seite. Client kennt nicht die Umleitung. Es ermöglicht Ihnen, die Abfrage-String und bilden Variablen zu übertragen.

So ist es auf Ihre Bedürfnisse hängt zu entscheiden, welche besser ist.

eingeben Bild Beschreibung hier

„response.redirect“ und „Server.Transfer“ helfen Benutzer von einer Seite zur anderen Seite zu übertragen, während die Seite ausgeführt wird. Aber die Art, wie sie diese Übertragung / Umleitung tun, ist sehr unterschiedlich.

Falls Sie visueller Typ und würden gerne Demonstration seht eher als Theorie würde ich vorschlagen, die unter facebook Video zu sehen, die den Unterschied in einer demonstrativen Art und Weise erklärt.

https://www.facebook.com/photo.php?v=762186150488997

Der wesentliche Unterschied zwischen ihnen ist, die die Übertragung der Fall ist. In „response.redirect“ wird die Übertragung durch den Browser durchgeführt, während in „Server.Transfer“ sie vom Server fertig ist. Lassen Sie uns versuchen, diese Aussage in einer näheren Weise zu verstehen.

In "Server.Transfer" Folgende ist die Folge davon, wie Übertragung geschieht: -

1.User sendet eine Anforderung an eine ASP.NET-Seite. In der folgenden Abbildung wird die Anforderung an „WebForm1“ gesendet und wir möchten „Webform2“ navigieren.

2.Server beginnt „WebForm1“ und der Lebenszyklus der Seite beginnt mit der Ausführung. Doch bevor der komplette Lebenszyklus der Seite abgeschlossen ist „Server.Transfer“ passiert „WebForm2“.

3. „Webform2“ Seite-Objekt erstellt wird, wird die volle Seite Lebenszyklus ausgeführt und Ausgabe HTML-Antwort wird dann an den Browser gesendet.

eingeben Bild Beschreibung hier

Während in "Response.Redirect" finden Sie die Abfolge der Ereignisse für die Navigation: -

1.Client (Browser) sendet eine Anforderung an eine Seite. In der folgenden Abbildung wird die Anforderung an „WebForm1“ gesendet und wir möchten „Webform2“ navigieren.

2.Life Zyklus von "WebForm1" startet die Ausführung. Aber zwischen dem Lebenszyklus „Response.Redirect“ passiert.

3.Now anstatt Server eine Umleitung zu tun, sendet er einen HTTP-302-Befehl an den Browser. Dieser Befehl teilt dem Browser mit, dass er eine GET-Anforderung initiieren muss „WebForm2.aspx“ Seite.

4.Browser interpretiert den 302-Befehl und sendet eine GET-Anforderung für "WebForm2.aspx".

eingeben Bild Beschreibung hier

Mit anderen Worten: „Server.Transfer“ wird durch den Server ausgeführt wird, während „Response.Redirect“ durch thr Browser ausgeführt wird. „Response.Redirect“ muss zwei Anforderungen eine Umleitung von der Seite zu tun.

So, wenn "Server.Transfer" zu verwenden, und wenn die Verwendung von "Response.Redirect"?

Verwenden Sie „Server.Transfer“, wenn Sie die Seiten navigieren möchten, die auf demselben Server befinden, verwenden Sie „Response.Redirect“, wenn Sie zwischen den Seiten navigieren möchten, die auf verschiedenen Server und Domäne befindet.

eingeben Bild Beschreibung hier

Im Folgenden finden Sie eine Übersichtstabelle, deren Unterschiede Kreiden und in dem Szenario zu verwenden.

eingeben Bild Beschreibung hier

Die Schönheit des Server.Transfer ist, was man damit machen kann:

TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");

Sie können alles von Ihrer vorherigen Seite unter Verwendung der obigen Verfahren erhalten, solange Sie Server.Transfer verwenden, aber nicht Response.Redirect

Neben ScarletGarden Kommentar, müssen Sie auch die Auswirkungen der Suchmaschinen und Ihre Umleitung berücksichtigen. Hat diese Seite permanent bewegt? Vorübergehend? Es macht einen Unterschied.

siehe: Response.Redirect vs. "301 Moved Permanently" :

  

Wir haben alle verwendeten Response.Redirect an   eine oder andere Zeit. Es ist die schnelle   und einfache Weise zu erhalten Besucher zeigten   in der richtigen Richtung, wenn sie irgendwie   Ende in der falschen Stelle. Aber haben Sie   wissen, dass Response.Redirect ein sendet   HTTP-Antwortstatuscode „302   Gefunden“, wenn Sie wirklich möchten vielleicht   Senden "301 Moved Permanently"?

     

Die Unterscheidung scheint klein, aber in   bestimmten Fällen kann es tatsächlich eine machen   großer Unterschied. Zum Beispiel, wenn Sie   verwenden, um ein „301 Dauerhaft verschoben“ response   Code, werden die meisten Suchmaschinen entfernen   der veraltete Link von ihrem Index und   ersetzen Sie es mit der neuen ein. Wenn du   verwenden „302 Found“, sie werden weiterhin   Rückkehr zur alten Seite ...

Transfer ist vollständig serverseitige. Client-Adressleiste bleibt konstant. Einige Komplexität über den Transfer von Kontext zwischen den Anforderungen. Flushing und Seite-Handler neu zu starten, kann dies Ihren Transfer früh in der Pipeline beispielsweise teuer sein in einem Httpmodule während Beginrequest. Lesen Sie die MSDN-Dokumentation sorgfältig und testen und verstehen, um die neuen Werte von HttpContext.Request - vor allem in Postback-Szenarien. Wir verwenden in der Regel Server.Transfer für Fehlerszenarien.

Redirect beendet die Anforderung mit einer 302 Status und clientseitige Hin- und Rückantwort mit und intern isst eine Ausnahme (kleinere Server perf Hit - davon abhängt, wie viele Sie einen Tag tun) Client dann auf neue Adresse navigiert. Browser-Adressleiste & Geschichte Updates usw. Kunde zahlt die Kosten für eine zusätzliche Hin- und Rück - Kosten auf Latenz variiert. In unserem Geschäft Redirect wir viel wir unser eigenes Modul schrieb die Ausnahme Kosten.

zu vermeiden

Response.Redirect ist teurer, da es eine zusätzliche Fahrt zum Server hinzufügt, herauszufinden, wo zu gehen.

Server.Transfer ist effizienter, aber es kann ein wenig irreführend für den Benutzer, da die URL nicht physisch geändert werden.

Nach meiner Erfahrung hat sich die Performance-Unterschied nicht signifikant genug gewesen, um den zweiten Ansatz zu verwenden,

Es gibt viele Unterschiede, wie oben angegeben. Neben vor allem gibt es einen weiteren Unterschied. Response.Redirect() verwendet werden können Benutzer zu einer beliebigen Seite zu umleiten, die nicht Teil der Anwendung ist aber Server.Transfer() kann nur innerhalb der Anwendung zu umleiten Benutzer verwendet werden.

//This will work.
Response.Redirect("http://www.google.com");

//This will not work.
Server.Transfer("http://www.google.com");

Server.Transfer nicht die URL im Browser-Client ändern, so effektiv der Browser weiß nicht, Sie zu einem anderen Server-Side-Handler geändert. Response.Redirect teilt den Browser auf eine andere Seite zu verschieben, so dass die URL in der Titelleiste ändert.

Server.Transfer ist etwas schneller, da es einen Roundtrip zum Server vermeidet, aber die Nicht-Veränderung von url kann entweder gut oder schlecht für Sie sein, je nachdem, was Sie zu tun versuchen.

Response.Redirect: wird den Browser mitgeteilt, dass die angeforderte Seite an einem neuen Standort zu finden. Der Browser leitet dann eine weitere Anforderung an die neue Seite seines Inhalts im Browser geladen werden. Daraus ergeben sich zwei Anforderungen durch den Browser.

Server.Transfer: Sie überträgt die Ausführung von der ersten Seite zur zweiten Seite auf dem Server. Soweit der Browser-Client betrifft, so hat es eine Anforderung und die erste Seite ist die mit Inhalt zu reagieren. Der Vorteil dieses Ansatzes ist eine weniger Hin- und Rückfahrt mit dem Server von dem Client-Browser. Außerdem sind alle geschrieben Formularvariablen und Query-String-Parameter zur Verfügung, um die zweite Seite als auch.

Nur mehr Details über Transfer (), ist es tatsächlich ist Server.Execute () + Response.End () Code der Quelle ist unter (von Mono / .net 4.0):

public void Transfer (string path, bool preserveForm)
{
    this.Execute (path, null, preserveForm, true);
    this.context.Response.End ();
}

und Ausführen (), ist es, was zu laufen ist die Handler des Weges gegeben, siehe

  

ASP.NET nicht prüft, ob der aktuelle Benutzer autorisiert ist, die Ressource durch die Ausführen Methode geliefert anzuzeigen. Obwohl die ASP.NET Autorisierungs- und Authentifizierungslogik ausgeführt wird, bevor die ursprünglichen Ressourcenhandler aufgerufen wird, ruft ASP.NET direkt die Handler von der angegebenen Ausführen Methode und nicht erneut ausgeführt Authentifizierungs- und Autorisierungslogik für die neue Ressource. Wenn Ihre Anwendung Kunden Sicherheitspolitik erfordert eine entsprechende Berechtigung hat, um auf die Ressource zugreifen, sollte die Anwendung reauthorization erzwingen oder einen benutzerdefinierten Zugriffssteuerungsmechanismus zur Verfügung stellen.

     

Sie können reauthorization erzwingen, indem Sie mit der Redirect Methode anstelle der Ausführen Methode. Redirect führt eine clientseitige Umleitung in dem der Browser die neue Ressource anfordert. Da diese Umleitung eine neue Anforderung ist das System gelangt, wird es auf alle Authentifizierungs- und Autorisierungslogik sowohl Internet Information Services (IIS) und ASP.NET Sicherheitsrichtlinie unterworfen.

     

- von MSDN

Response.Redirect beinhaltet eine zusätzliche Hin- und Rückfahrt und aktualisiert die Adressleiste ein.

Server.Transfer nicht die Adressleiste ändern verursacht, der Server auf die Anforderung reagiert mit Inhalt von einer anderen Seite

z.

Response.Redirect: -

  1. Auf dem Client der Browser eine Seite http: //InitiallyRequestedPage.aspx
  2. Auf dem Server antwortet auf die Anfrage mit 302 die Umleitungsadresse http:. //AnotherPage.aspx
  3. Auf dem Client der Browser eine zweite Anfrage an die Adresse http:. //AnotherPage.aspx
  4. Auf dem Server antwortet mit Inhalt von http: //AnotherPage.aspx

Server.Transfer: -

  1. Auf der Client-Browser eine Seite http: //InitiallyRequestedPage.aspx
  2. Auf dem Server Server.Transfer auf http: //AnotherPage.aspx
  3. Sie auf dem Server die Antwort auf die Anfrage gemacht wird für http: //InitiallyRequestedPage.aspx vorbei zurück Inhalt von http: //AnotherPage.aspx

Response.Redirect

Pros: - RESTful - Es ändert sich die Adressleiste, kann die Adresse verwendet werden Zustandsänderungen zwischen Anfragen aufzuzeichnen.

Cons: - Langsam - Es gibt eine extra Hin- und Rückfahrt zwischen dem Client und dem Server. Das kann teuer werden, wenn es erhebliche Latenz zwischen dem Client und dem Server.

Server.Transfer

Pros: - Schnell.

Nachteile: - Staat verloren - Wenn Sie Server.Transfer verwenden den Zustand der Anwendung als Reaktion auf ändern Rücken zu veröffentlichen, wenn die Seite wird dann dieser Zustand neu geladen wird verloren gehen, da die Adressleiste wird das gleiche sein, wie es auf dem ersten war, Anfrage.

Response.Redirect Response.Redirect () werden Sie auf eine neue Seite senden, die Adressleiste aktualisieren und an die Browser-Historie hinzufügen. Auf Ihrem Browser können Sie auf zurück. Er leitet die Anfrage an einigen einfachen HTML-Seiten auf unserem Server oder auf einen anderen Webserver. Es bewirkt, dass zusätzliche Roundtrips zum Server bei jeder Anfrage. Dabei spielt es keine Abfrage-Zeichenfolge und Formularvariablen von der ursprünglichen Anfrage erhalten. Es ermöglicht die neue umgeleiteten URL zu sehen, wo sie im Browser umgeleitet wird (und es mit einem Lesezeichen versehen kann, wenn es notwendig ist). Antwort. Redirect sendet einfach eine Nachricht bis auf den (HTTP 302) Browser.

Server.Transfer Server.Transfer () nicht die Adressleiste ändern, können wir nicht treffen back.One sollte Server.Transfer () verwenden, wenn er / sie sehen den Benutzer nicht möchte, wohin er geht. Einige Zeit auf einem „Laden“ Typ Seite. Er überträgt aktuelle Seite Anforderung an einem anderen ASPX-Seite auf dem gleichen Server. Es bewahrt Server-Ressourcen und vermeidet den unnötigen Roundtrip zum Server. Es bewahrt Abfrage-Zeichenfolge und Formularvariablen (optional). Es ist nicht die reale URL zeigen, wo er die Anforderung in dem Benutzer Web-Browser umleitet. Server.Transfer geschieht ohne den Browser etwas zu wissen, die Browser-Anfrage eine Seite, aber der Server liefert den Inhalt eines anderen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top