Server.Transfer Vs. Response.Redirect

Koks skirtumas tarp „ Server.Transfer ir „ Response.Redirect ?

  • Kokie yra kiekvieno privalumai ir trūkumai?
  • Kada suderinama kita?
  • Kada tai netinka?
241
22 окт. nustatyti kedar kamthe 22 okt. 2008-10-22 08:34 '08, 08:34 2008-10-22 08:34
@ 18 atsakymų

Response.Redirect tiesiog siunčia pranešimą (HTTP 302) į naršyklę.

Server.Transfer vyksta be naršyklės, žinant ką nors, naršyklė prašo puslapio, tačiau serveris grąžina kito turinį.

214
22 окт. Atsakymas pateikiamas CMS 22 okt. 2008-10-22 08:41 '08 8:41 am 2008-10-22 08:41

Response.Redirect() atsiųs jus į naują puslapį, atnaujins adreso juostą ir pridės ją prie naršyklės istorijos. Naršyklėje galite spustelėti mygtuką „Atgal“.

Server.Transfer() adreso juostos nekeičia. Jūs negalite nukentėti.

border=0

Server.Transfer() kai nenoriu, kad vartotojas matytų, kur aš einu. Kartais atsisiuntimo tipo puslapyje.

Priešingu atveju visada naudosiu Response.Redirect() .

87
22 окт. Atsakymą pateikė Christian Payne spalio 22 d. 2008-10-22 08:44 '08, 08:44 2008-10-22 08:44

Trumpai: „ Response.Redirect tiesiog nurodo naršyklei pereiti į kitą puslapį. Server.Transfer padeda sumažinti užklausas į serverį, saugo URL vienodai ir, esant nedaug klaidų, leidžia perduoti užklausos eilutę ir formų kintamuosius.

Ką radau ir sutinku su ( šaltiniu ):

Server.Transfer panašus į tai, kad jis siunčia vartotojui kitą puslapį su Server.Transfer("WebForm2.aspx") tipo Server.Transfer("WebForm2.aspx") . Tačiau pareiškime yra nemažai akivaizdžių pranašumų ir trūkumų.

Pirma, perėjimas į kitą puslapį naudojant „ Server.Transfer išsaugo serverio išteklius. Vietoj to, kad naršyklė būtų nukreipta peradresuoti, ji tiesiog pakeičia „serverio“ fokusą ir siunčia užklausą. Tai reiškia, kad negaunate tiek daug HTTP užklausų, kurios palengvina žiniatinklio serverį ir pagreitina jūsų programų vykdymą.

Tačiau būkite atsargūs: kadangi „perkėlimo“ procesas gali veikti tik tose svetainėse, kurios veikia serveryje; Negalite naudoti „ Server.Transfer norite siųsti vartotoją į išorinę svetainę. Tik Response.Redirect gali tai padaryti.

Antra, Server.Transfer palaiko šaltinio URL naršyklėje. Tai iš tikrųjų gali padėti supaprastinti duomenų įvedimo metodus, nors jis gali klaidinti derinimą.

Tai dar ne viskas: Server.Transfer metodas taip pat turi antrą parametruojamą „preserveForm“. Jei nustatysite reikšmę True , naudodami operatorių, pvz., Server.Transfer("WebForm2.aspx", True) , esama užklausų eilutė ir bet kokie formų kintamieji vis tiek bus prieinami jums.

Pavyzdžiui, jei „WebForm1.aspx“ turi „TextBox“ valdiklį, vadinamą „TextBox1“, ir einate į „WebForm2.aspx“ su forma „True“, galite gauti originalaus „TextBox Control“ puslapio vertę spustelėję Request.Form("TextBox1") .

70
06 февр. Atsakymas duotas TStamper 06 Feb. 2009-02-06 21:39 '09 at 9:39 PM 2009-02-06 21:39

Atsakas. Peradresavimas nukreipia puslapį į kitą puslapį po . Todėl klientas žino peradresavimą.

„Server.Transfer“ nutraukia dabartinį puslapio vykdymą. Klientas nežino peradresavimo. Tai leidžia jums perduoti užklausos eilutę ir formų kintamuosius.

Todėl tai priklauso nuo jūsų poreikių, o tai geriau pasirinkti.

28
06 февр. Atsakymą pateikė Canavar 06 vasaris. 2009-02-06 21:29 '09 21:29 val. 2009-02-06 21:29

Response.Redirect() turėtų būti naudojamas, kai:

  • mes norime nukreipti užklausą į kai kuriuos paprastus HTML puslapius mūsų serveryje ar kituose interneto serveriuose.
  • mes nesirūpiname, kad kiekvienam prašymui serveryje būtų reikalaujama papildomų atsiliepimų
  • nereikia išsaugoti užklausų eilutės ir formų kintamųjų iš pradinės užklausos
  • norime, kad naudotojai matytų naują nukreiptą URL, kur jis nukreipiamas į savo naršyklę (ir, jei reikia, galėsite ją pažymėti)

Server.Transfer() turėtų būti naudojamas, kai:

  • norime perkelti dabartinį puslapio užklausą į kitą .aspx puslapį tame pačiame serveryje
  • norime išsaugoti serverio išteklius ir išvengti nereikalingų skambučių į serverį
  • norime išsaugoti užklausos eilutės ir formos kintamuosius (neprivaloma)
  • mums nereikia rodyti tikrojo URL, kuriame nukreipėme užklausą į naudotojų žiniatinklio naršyklę
26
11 нояб. Atsakymas pateiktas su „ SoftDev“ lapkričio 11 d. 2011-11-11 11:24 '11 11:24 am 2011-11-11 11:24

2019

18
19 мая '14 в 13:07 2014-05-19 13:07 atsakymą pateikė Shivprasad Koirala gegužės 19, 14 d. 13:07 2014-05-19 13:07

Be „ScarletGarden“ komentaro taip pat turite apsvarstyti paieškos sistemų ir peradresavimo poveikį. Ar šis puslapis nuolat judėjo? Laikinai? Tai svarbu.

žr. „ Response.Redirect vs. "301 perkelta visam laikui" :

Mes visi naudojome „Response.Redirect“ vienu metu. Tai greitas ir paprastas būdas lankytojams nukreipti teisinga kryptimi, jei jie kažkaip atsidurs neteisingoje vietoje. Bet žinote, kad „Response.Redirect“ siunčia HTTP atsako būsenos kodą „302 Found“, kai tikrai norite siųsti „301 perkelti amžinai“?

Skirtumas atrodo nedidelis, tačiau kai kuriais atvejais tai gali padaryti didelį skirtumą. Pavyzdžiui, jei naudojate kodą „301 perkeltas perimtas“, dauguma paieškos sistemų pašalins pasenusią nuorodą iš savo indekso ir pakeis jį nauju. jei naudojate „302 Rasta“, jie ir toliau grįš į seną puslapį ...

10
06 февр. Atsakymas, kurį pateikė Diodeus - James MacFarlane 06 vasaris 2009-02-06 21:38 '09 at 9:38 PM 2009-02-06 21:38

„Beauty Server“.

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

Jei naudojate „Server.Transfer“, bet ne „Response.Redirect“, galite gauti kažką iš ankstesnio puslapio naudodami pirmiau nurodytą metodą

8
25 февр. Izraelio atsakymas Margulies 25 Vas 2013-02-25 19:38 '13, 19:38, 2013-02-25 19:38

Vertimas yra visiškai serveris. Kliento adreso juosta išlieka pastovi. Kai kurie sunkumai perduodami tarp užklausų. Puslapio tvarkyklių plovimas ir iš naujo paleidimas gali būti brangus, todėl judėti kelio pradžioje, pvz., „HttpModule“ „BeginRequest“ metu. Atidžiai perskaitykite MSDN dokumentus ir patikrinkite ir peržiūrėkite naujas „HttpContext.Request“ reikšmes - ypač „Postback“ scenarijuose. Paprastai mes naudojame serverį. Perduodami klaidų scenarijai.

Peradresavimas užbaigia užklausą su 302 būsena ir atšaukimu kliento pusėje ir viduje valgo išimtį (nedidelis serverio našumas priklauso nuo to, kiek jūs darote per dieną). Tada klientas pereina prie naujo adreso. Naršyklės adreso juostos ir istorijos atnaujinimai ir kt. Klientas moka papildomos ekskursijos kainą - kaina skiriasi priklausomai nuo vėlavimo. Mūsų versle daug nukreipiame, mes parašėme savo modulį, kad išvengtume atskirties išlaidų.

6
22 окт. atsakymas duotas stephbu 22 spalis 2008-10-22 08:42 '08 8:42 am 2008-10-22 08:42

Atsakymas.Redirect yra brangesnis, nes priduria papildomą kelionę į serverį, kad išsiaiškintumėte, kur eiti.

Serveris. Perdavimas yra efektyvesnis, tačiau jis gali būti šiek tiek klaidingas vartotojui, nes URL nėra fiziškai keičiamas.

Mano patirtis rodo, kad veiklos skirtumai nebuvo pakankamai reikšmingi, kad būtų naudojamas šis požiūris.

5
22 окт. atsakymas duotas „ deadbug“ 22 val. 2008-10-22 08:41 '08 8:41 am 2008-10-22 08:41

Response.Redirect: nurodo naršyklei, kad pageidaujamą puslapį galima rasti naujoje vietoje. Tada naršyklė inicijuoja kitą naujo puslapio užklausą, įkeldama jos turinį į naršyklę. Taip gaunami du naršyklės prašymai.

Serveris. Perdavimas: jis perkelia vykdymą iš pirmojo puslapio į antrąjį serverio puslapį. Kalbant apie naršyklės klientą, jis pateikė vieną prašymą, o pirmame puslapyje atsako turinys. Šio požiūrio privalumas - tai vienkartinė kliento naršyklės kelionė į serverį. Be to, visi paskelbti formų kintamieji ir užklausų eilutės parametrai pateikiami antrajam puslapiui.

4
24 янв. Nick Kahn atsakymas Jan 24 2012-01-24 04:43 '12 ne 4:43 2012-01-24 04:43

Serveris. Perdavimas nekeičia URL kliento naršyklėje, todėl naršyklė nežino, kad perėjote prie kito serverio tvarkytojo. Response.Redirect nurodo naršyklei pereiti į kitą puslapį, todėl keičiamas URL pavadinimas.

Server.Transfer veikia šiek tiek greičiau, nes vengia grįžti į serverį, tačiau URL keičiant gali būti gera ar bloga, priklausomai nuo to, ką bandote daryti.

4
06 февр. atsakymas, kurį pateikė krosenvoldas 06 vasaris 2009-02-06 21:38 '09 at 9:38 PM 2009-02-06 21:38

Daugiau apie „Transfer“ (), iš tikrųjų tai yra „Server.Execute“ () + Response.End (), jos šaltinis yra žemiau (iš „Mono / .net 4.0“):

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

ir „Execute“ (), prasideda nurodyto kelio tvarkytojas , žr

ASP.NET netikrina, ar dabartiniam vartotojui leidžiama peržiūrėti iš Execute metodo suteiktą išteklių. Nors ASP.NET autorizacija ir autentifikavimas atliekamas prieš skambinant į šaltinio išteklių tvarkytoją, ASP.NET tiesiogiai skambina vykdytojui, nurodytam vykdymo metodu, ir nepradeda naujo resurso autentifikavimo ir autorizacijos logikos. Jei programos saugumo politikoje reikalaujama, kad klientai turėtų atitinkamą leidimą naudotis ištekliais, paraiška turi būti priversta pakartotinai autorizuoti arba suteikti pritaikytą prieigos kontrolės mechanizmą.

Jūs galite priversti pakartotinį leidimą naudoti peradresavimo metodu vietoj Execute metodo. Peradresavimas atlieka kliento pusės peradresavimą, kuriame naršyklė reikalauja naujo šaltinio. Kadangi šis peradresavimas yra naujas prašymas, įeinantis į sistemą, jis priklauso nuo visos interneto informacijos paslaugų (IIS) politikos ir ASP.NET saugumo politikos autentiškumo ir autorizacijos logikos.

- iš MSDN

3
12 сент. Atsakymas duotas RockXrock 12 sep . 2013-09-12 08:43 '13, 08:43 am 2013-09-12 08:43

„Client Server.Transfer“ (): rodomas tik kaip pageidaujamas puslapis, bet visas pageidaujamo puslapio turinys. Duomenys gali būti saugomi puslapiuose naudojant „Context.Item“ kolekciją, kuri yra vienas iš geriausių būdų perduoti duomenis iš vieno puslapio į kitą, išlaikant puslapio būseną.

Client Response.Redirect (): žino fizinę vietą (puslapio pavadinimas ir užklausos eilutė). Kontekstas.Pagalba į nukreipimo puslapį praranda stabilumą. Ankstesnėse IIS versijose, jei norėjome nusiųsti vartotoją į naują tinklalapį, vienintelė galimybė buvo „Response.Redirect“. Nors šis metodas leidžia pasiekti mūsų tikslą, jis turi keletą svarbių trūkumų. Didžiausia problema yra ta, kad šis metodas sukelia kiekvieną puslapį kaip atskirą sandorį. Be to, sunku išlaikyti sandorių vientisumą, „Response.Redirect“ pristato keletą papildomų galvos skausmų. Pirma, tai apsaugo nuo gero kodo įdėjimo. Antra, prarandate prieigą prie visų užklausos objekto savybių. Žinoma, yra problemų, tačiau jos yra sudėtingos. Pagaliau „Response.Redirect“ reikalauja ištisinio reiso į klientą, kuris dideliuose mazguose sukelia mastelio keitimo problemas.

2
21 сент. Atsakymas pateikiamas Nimesh khatri 21 rugsėjo. 2016-09-21 13:56 '16 at 13:56 pm 2016-09-21 13:56
  • Kaip ir hipersaitas ir „Response.Redirect“, serveris.Perdavimas naudojamas naviguoti į kitus puslapius / svetaines, veikiančias tame pačiame interneto serveryje.
  • „Server.Transfer“ negalima naudoti norint naršyti svetaines / puslapius kitame žiniatinklio serveryje.
  • Server.Perkėlimas nepakeičia adreso adreso adreso URL
  • Serveris. Perdavimas yra greitesnis nei „Response.Redirect“, nes peradresavimas įvyksta serveryje vienu užklausos / atsakymo ciklu. Response.Redirect () apima 2 užklausų / atsakymų ciklus.
  • Naudojant „Server.Transfer“, išsaugomi pradinio užklausos formos kintamieji.
2
01 мая '16 в 15:29 2016-05-01 15:29 atsakymas suteikiamas Rae Lee 01 gegužės 16 d. 15:29 2016-05-01 15:29

Yra daug skirtumų, kaip nurodyta pirmiau. Be to, yra dar vienas skirtumas. „Response.redirect“ () galima naudoti norint nukreipti vartotoją į bet kurį puslapį, kuris nėra programos dalis, tačiau server.transfer () gali būti naudojamas tik naudotojui nukreipti į programą.

 Response.Redirect(''http://www.google.com"); //This will work. Server.Transfer(''http://www.google.com"); //This will not work. 
2
09 авг. Atsakymą pateikia „ Microsoft Developer“ 09 rug. 2013-08-09 14:07 '13, 14:07, 2013-08-09 14:07

Response.Redirect Response.Redirect () nukreips jus į naują puslapį, atnaujins adreso juostą ir pridės ją prie naršyklės istorijos. Naršyklėje galite spustelėti „Atgal“. Jis nukreipia užklausą į kai kuriuos paprastus HTML puslapius mūsų serveryje ar kituose interneto serveriuose. Dėl to kiekvienam prašymui serveryje atsiranda papildomų atšaukimų. Jis neišsaugo užklausos eilutės ir formos kintamųjų iš pradinės užklausos. Tai leidžia matyti naują nukreiptą URL, kur jis nukreipiamas į naršyklę (ir prireikus galėsite jį pažymėti). Atsakas. Peradresavimas tiesiog siunčia pranešimą į naršyklę (HTTP 302).

Server.Transfer Server.Transfer () nepakeičia adreso juostos, mes negalime nukentėti atgal. Turi būti naudojamas „Server.Transfer“ (), kai jis nenori, kad vartotojas matytų, kur jis vyksta. Kartais atsisiuntimo tipo puslapyje. Ji persiunčia dabartinį puslapio užklausą į kitą .aspx puslapį tame pačiame serveryje. Jis taupo serverio išteklius ir vengia nereikalingų skambučių į serverį. Jis išsaugo užklausų eilutes ir formas (neprivaloma). Jame nerodomas tikras URL, kuriame jis nukreipia užklausą į naudotojų žiniatinklio naršyklę. Serveris. Perdavimas vyksta be naršyklės, žinant ką nors, naršyklė prašo puslapio, tačiau serveris grąžina kito turinį.

0
20 июля '15 в 16:33 2015-07-20 16:33 atsakymą pateikė Shailendra Mishra liepos 20 d., 15 val. 16:33 2015-07-20 16:33

„Response.Redirect“ apima papildomą kelionę atgal ir atnaujina adreso juostą.

„Server.Transfer“ nepakeičia adreso juostos, serveris atsako į užklausą su turiniu iš kito puslapio

Pavyzdžiui.

Response.Redirect: -

Server.Perdavimas: -

Response.Redirect

Argumentai "už": - RESTful - jis pakeičia adreso juostą, adresas gali būti naudojamas įrašyti būsimus pokyčius tarp užklausų.

Minusai: - Lėtas - yra papildomas turas tarp kliento ir serverio. Tai gali būti brangi, kai tarp kliento ir serverio yra didelė vėlavimo trukmė.

Serveris

Argumentai "už": - Greitas.

Trūkumai: - prarasta valstybė - jei naudojate serverį.Persiųskite, kad pakeistumėte programos būseną, atsakydami į grįžtamąjį ryšį, jei puslapio įkėlimas, būsena bus prarasta, nes adresų juosta bus tokia pati, kaip ir pirmame prašyme.

0
14 мая '14 в 4:23 2014-05-14 04:23 atsakė Mickui gegužės 14 d., 14 val

Kiti klausimai apie žymių arba Užduoti klausimą