Care este diferența între Server.Transfer " și " Răspuns.Redirect`?
Răspuns.Redirect
pur și simplu trimite un mesaj (HTTP 302) jos a browser-ului.
`Server.Transferul se întâmplă fără browser-ul știe nimic, browser solicită o pagină, dar serverul returnează conținutul de altul.
Răspuns.Redirect()
va trimite la o pagină nouă, actualizare bara de adrese și adăugați-l la Istoria Browser-ului. Pe browser-ul dvs. puteți să faceți clic pe înapoi.
Server.De Transfer()
nu se schimba bara de adrese. Nu poți lovi înapoi.
Eu folosesc Serverul.De Transfer()` cand eu nu't doriți ca utilizatorul să văd unde mă duc. Uneori pe o "de încărcare" tip de pagină.
În caz contrar, am'll utilizați întotdeauna Răspunsul.Redirect()`.
Pentru a fi Scurt: de Reacție.Redirectpur și simplu spune browser-ului pentru a vizita o altă pagină.
Server.Transfer` ajută la reducerea server cereri, păstrează URL același lucru și, cu un pic de bug-bashing, vă permite să transferați șir de interogare și formă variabile.
Am găsit ceva și sunt de acord cu (source):
Server.De Transfer este similară în care trimite utilizatorul la o altă pagină cu o declarație precum
Server.De Transfer("WebForm2.aspx")`. Cu toate acestea, declarația are o serie de avantaje și dezavantaje distincte.în Primul rând, transferul la o altă pagină folosind Serverul.Transfer` conservă resurse de pe server. În loc de a spune browser-ul pentru a redirecționa, se schimbă pur și simplu "concentra" de pe serverul de Web și transferuri la cerere. Acest lucru înseamnă că don't obține destul de la fel de multe HTTP cereri care vin prin, care, prin urmare, usureaza presiunea pe server Web și de a face aplicațiile să ruleze mai repede.
Dar ai grija: pentru că "transfer" procesul poate lucra doar pe cei site-uri care rulează pe server; nu poate't folosi Serverul.Transfer` pentru a trimite utilizatorul la un site extern. Numai Răspunsul.Redirect poate face asta.
în al doilea rând,
Server.Transfer
menține original URL-ul în browser-ul. Acest lucru poate într-adevăr ajuta la eficientizarea date de intrare tehnici, deși poate pentru confuzie atunci când depanare.Ca's nu toate:
Server.Transfer
metodă are, de asemenea, un al doilea parametru—"preserveForm". Dacă îl setați la "Adevărat", utilizând o declarație cum ar fiServer.De Transfer("WebForm2.aspx", True)
, existente interogare string și orice formă variabile va fi încă disponibil pe pagina transferul.De exemplu, dacă WebForm1.aspx are un control casetă Text numit TextBox1 și te-ai transferat la WebForm2.aspx cu preserveForm set parametru la True,'d fi capabil de a recupera valoarea pagina originală Caseta de control prin corelarea
Cerere.Forma("TextBox1")
.
Răspuns.Redirect()
ar trebui să fie utilizat atunci când:
Server.De Transfer()
ar trebui să fie utilizat atunci când:
Răspuns.Redirecționare redirecționează pagina la alta pagina după prima pagina ajunge la client. Deci, clientul stie cu siguranta.
Server.Transfer chit de executare curentă a paginii. Clientul nu stie de redirecționare. Acesta vă permite să transferați șir de interogare și formă variabile.
Deci, depinde de nevoile dumneavoastră să alegeți ce este mai bine.
"răspuns.redirect" și "server.transfer" ajută la transferul de utilizator la o pagină la altă pagină în timp ce pagina este de executare. Dar modul în care se face acest transfer / redirect este foarte diferit.
În cazul în care vă sunt de tip vizual și-ar dori vedea demonstrație, mai degrabă decât teoria aș sugera pentru a vedea mai jos facebook video care explică diferența într-o mai convingător mod.
https://www.facebook.com/photo.php?v=762186150488997
Principala diferență dintre ele este care face transferul. În "răspuns.redirect" transferul se face prin browser-ul în timp ce în "server.transfer" este efectuată de către server. Să încercăm să înțelegem această declarație într-un mod mai detaliat mod.
În "Server.Transfer" următorul este secvența de modul de transfer se întâmplă:-
1.Utilizatorul trimite o cerere de la o ASP.NET pagina. În figura de mai jos la cerere este trimis la "WebForm1" și ne-ar plăcea să mergeți la "Webform2".
2.Serverul pornește de executare "Webform1" și ciclul de viață al paginii începe. Dar înainte de a finaliza ciclul de viață al paginii este completat "de Server.transfer" se întâmplă să "WebForm2".
3."Webform2" pagina de obiect este creat, pagini pline de ciclu de viață este executat și de ieșire HTML de răspuns este apoi trimis la browser-ul.
În timp ce în "Răspuns.Redirect" în urma este o secvență de evenimente de navigație:-
1.Client (browser) trimite o cerere pentru o pagină. În figura de mai jos la cerere este trimis la "WebForm1" și ne-ar plăcea să mergeți la "Webform2".
2.Ciclul de viață al "Webform1" începe executarea. Dar între a ciclului de viață "Răspuns.Redirect" se întâmplă.
3.Acum, mai degrabă decât de server faci un redirect , el trimite un HTTP 302 comanda pentru browser-ul. Această comandă spune browser-ului că are de a iniția o cerere de a "Webform2.aspx" pagina.
4.Browser-ul interpretează 302 comanda și trimite o cerere pentru "Webform2.aspx".
Cu alte cuvinte "Server.Transfer" este executat de server în timp ce "Răspuns.Redirect" este executat de către thr browser-ul. "Răspuns.Redirect" trebuie să două cereri pentru a face un redirect de pe pagina.
Deci, atunci când pentru a utiliza "Server.Transfer" și atunci când pentru a utiliza "Răspuns.Redirect" ?
Utilizați "Server.Transfer" atunci când doriți să navigați pagini care locuiesc pe același server, utilizați "Răspuns.Redirect" atunci când doriți să navigați între pagini care se află pe alt server si domeniu.
Mai jos este un tabel de sinteză care chalks diferențe și în ceea ce scenariu de utilizare.
Frumusețea Server.Transferul este ceea ce puteți face cu ea:
TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");
Puteți obține nimic de la pagina anterioară folosind metoda de mai sus, atâta timp cât utilizați Server.Transferul, dar nu a Răspuns.Redirect
În plus față de ScarletGarden's comentariu, ai nevoie de asemenea să ia în considerare impactul de motoarele de căutare și de redirecționare. Are această pagină s-a mutat definitiv? Temporar? Se face o diferență.
a se vedea: Răspuns.Redirect vs "301 Mutat Permanent":
Ne'am tot folosit de Răspuns.Redirecționa la un moment sau altul. L's rapid și modalitate ușoară de a obține vizitatori subliniat în direcția cea bună, dacă au cumva ajung în locul greșit. Dar ai stii ca Răspuns.Trimite un Redirect HTTP de răspuns cod de stare de "302 Descoperit" atunci când s-ar putea într-adevăr doriți să trimite "301 Mutat Permanent"?
diferența pare mică, dar în anumite cazuri, se poate face de fapt o mare diferență. De exemplu, dacă folosiți-o "301 Mutat Permanent" răspuns cod, de cele mai multe motoare de căutare va elimina depășite link-ul de la indexul lor și înlocuiți-l cu unul nou. Dacă de utilizare "302 Găsit", au'll continua revenind la vechea pagina...
Transferul este în întregime pe partea de server. Clientul bara de adrese rămâne constantă. Unele complexitate despre transferul de context între cereri. Înroșirea feței și repornirea pagina stivuitoare pot fi costisitoare, astfel încât face transferul mai devreme în conducta de exemplu, într-un HttpModule timpul BeginRequest. Citiți MSDN docs cu atenție, și de a testa și de a înțelege noile valori ale HttpContext.Cerere - mai ales în Postback scenarii. Noi, de obicei, utilizarea de Server.Transfer de eroare scenarii.
Redirect se termină la cerere cu o 302 statutul și client-side dus-intors răspuns cu și intern mănâncă o excepție (minor server perf lovit - depinde de cât de multe faci o zi) Clientul navighează apoi la noua adresa. Browser bara de adrese & actualizări istorie etc. Clientul plătește costul suplimentar dus-intors - costul variază în funcție de latență. În activitatea noastră ne redirect mult am scris propriile module pentru a evita excepția costurilor.
Există multe diferențe după cum se specifică mai sus. În afară de mai presus de toate, mai există o diferență. Răspuns.Redirect()
poate fi folosit pentru a redirecționa utilizatorul la orice pagină care nu este parte a cererii, dar Server.De Transfer()
poate fi folosit pentru a redirecționa utilizator în cadrul aplicației.
//This will work.
Response.Redirect("http://www.google.com");
//This will not work.
Server.Transfer("http://www.google.com");
Răspuns.Redirecționare este mai costisitoare, deoarece se adaugă un plus de vacanță la serverul să dau seama unde să meargă.
Server.Transferul este mai eficient, cu toate acestea, acesta poate fi un pic mis-care duce la utilizator deoarece Url-ul nu - 't fizic schimba.
În experiența mea, diferența de performanță nu a fost suficient de semnificative pentru a utiliza aceasta abordare
De răspuns.Redirect: spune browser-ului ca pagina solicitată poate fi găsit la o nouă locație. Browser-ul apoi inițiază o cerere la noua încărcare a paginii conținutul său în browser-ul. Acest lucru duce la două cereri de către browser.
De Server.Transfer: Se transferă execuția de la prima pagina la pagina a doua de pe server. În măsura în browser-ul clientului este în cauză, acesta a făcut o cerere și pagina inițială este cea a răspunde cu conținutul. Avantajul acestei abordări este unul mai puțin dus-intors de la server la browser-ul client. De asemenea, orice postate forma, variabilele și parametrii șirului de interogare sunt disponibile la pagina a doua la fel de bine.
Server.Transferul nu't a schimba URL-ul în browser-ul clientului, atât de eficient browser-ul nu știu de te-ai schimbat de la alt server-side handler. Răspuns.Redirect spune browser-ului pentru a trece la o altă pagină, așa că url-ul în bara de titlu modificări.
Server.Transferul este puțin mai repede, deoarece se evită unul dus-intors de la server, dar non-schimbarea url-ul poate fi bun sau rău pentru tine, în funcție de ceea ce're încercarea de a face.
Doar mai multe detalii despre Transfer(), l's este de fapt Server.Execute() + Răspuns.End(), codul său sursă este mai jos (de la Mono/.net 4.0):
public void Transfer (string path, bool preserveForm)
{
this.Execute (path, null, preserveForm, true);
this.context.Response.End ();
}
și pentru a Executa(), ceea ce este de a rula este handler a dat drumul, a se vedea
ASP.NET nu verifică dacă utilizatorul curent este autorizat pentru a vizualiza resurse livrate de către Executa metoda. Deși ASP.NET autorizare și autentificare logica se execută înainte de resurse originale handler este numit, ASP.NET direct apeluri handler indicat de Executa metodă și nu repetate de autentificare și autorizare de logica pentru noi resurse. Dacă cererea dumneavoastră's politica de securitate necesită clienților de a avea autorizația corespunzătoare pentru a accesa resursa, cererea de forță de importul sau de a oferi un acces personalizat-mecanism de control.
puteți forța importul prin utilizarea Redirecționa metoda în loc de Executa metoda. Redirecționa efectuează un client-side redirecționa în care browser-ul solicită resurse noi. Pentru că această redirecționare este o nouă cerere de intrarea în sistem, acesta este supus la toate autorizare și autentificare logica de Internet Information Services (IIS) și ASP.NET politica de securitate.
Răspuns.Redirect implică un extra round trip și actualizări bara de adrese.
Server.Transferul nu provoca bara de adrese pentru a schimba, serverul răspunde la cereri cu conținut de la o altă pagină
de exemplu
De răspuns.Redirect:-
De Server.Transfer:-
De răspuns.Redirect
Pro:- Odihnitor - Se schimbă bara de adrese, adresa poate fi folosit pentru a înregistra modificările de stare intermediară potrivită cereri.
Contra:- Încet - Există un cost tur-retur între client și server. Acest lucru poate fi costisitoare atunci când există substanțiale latență între client și server.
De Server.Transfer
Pro:- Rapid.
Dezavantaje:- Statul a pierdut - Daca're folosind Server.Transfer pentru a schimba starea de cererea ca răspuns la post spate, dacă pagina este apoi reloaded că statul va fi pierdut, ca și bara de adrese va fi la fel cum a fost la prima cerere.
De răspuns.Redirect Răspuns.Redirect() va trimite la o pagină nouă, actualizare bara de adrese și adăugați-l la Istoria Browser-ului. Pe browser-ul dvs. puteți să faceți clic pe înapoi. Acesta redirecționează cererea la niște simple pagini HTML de pe serverul nostru sau la un alt server web. Provoacă suplimentare dus-întors la server la fiecare cerere. Nu păstra Șir de Interogare și Formă Variabile de la cererea inițială. Acesta vă permite pentru a vedea noul redirecționat-URL-ul unde este redirecționat în browser-ul (și să fie capabil să-l marcaj dacă este necesar). Răspuns. Redirect pur și simplu trimite un mesaj la (HTTP 302) browser.
De Server.Transfer Server.De Transfer() nu se schimba bara de adrese, nu putem lovit din spate.Unul ar trebui să utilizați Server.De Transfer() atunci când el/ea nu vrea utilizatorului pentru a vedea unde se duce. Cândva pe o "de încărcare" tip de pagină. Acesta transferuri curente cerere de pagină la alta .aspx pagina de pe același server. Se păstrează resurse de pe server și evită inutile dus-întors la server. Se păstrează Șirul de Interogare și Formă Variabile (opțional). Nu arata real URL-ul unde se redirecționează cererea la utilizatorii Browser-ul Web. Server.Transferul se întâmplă fără browser-ul știe nimic, browser solicită o pagină, dar serverul returnează conținutul de altul.