2015-05-20 13 views
7

Sono nuovo nello sviluppo di asp.net. Attualmente sto lavorando ad un'applicazione web asp.net. Durante la risoluzione di un problema si è verificata un'eccezione "il thread è stato interrotto". Ho esaminato diversi articoli per comprendere a fondo l'eccezione.Qual è l'approccio migliore per reindirizzare l'utente in asp.net?

ho letto questo articolo grande on codeproject da Shivprasad Koirala che mi ha spiegato circa l'uso di Server.Transfer e Response.Redirect.

Poi sono andato a this post by Thomas Marquardt che mi ha fatto concludere Respose.Redirect(url,false) ma meglio usare

Server.ClearError(); 
Response.Redirect(url, false); 
Context.ApplicationInstance.CompleteRequest(); 

Ma ancora una volta this article da Imrambaloch dice c'è un problema di sicurezza utilizzando Response.Redirect(url, false), e utilizzare per invece

Response.Redirect(url, false); 
var context = HttpContext.Current; 
if (context != null) 
{ 
    context.ApplicationInstance.CompleteRequest(); 
} 

Ora alla fine sono un po 'confuso quale è il modo consigliato per reindirizzare.

La mia domanda: Qual è il modo migliore per reindirizzare l'utente eliminando i problemi di sicurezza e le prestazioni?

È Server.Transfer davvero così male rispetto a Response.Redirect?

risposta

4

Aggiungendo a @ risposta di William:

metodo Server.Transfer non modificare l'URL nel browser, ma reindirizzare l'utente alla nuova pagina. Mantiene le informazioni della pagina precedente sul server, mentre Response.Redirect reindirizza completamente senza mantenere lo stato dell'ultima pagina.

Per prestazioni, Response.Redirect ha un altro argomento endResponse (bool). Passare true nel secondo argomento potrebbe rallentare l'applicazione poiché non è consigliabile utilizzare EndResponse() anche se lo si sta eseguendo manualmente per completare la risposta. Piuttosto usa Context.ApplicationInstance.CompleteRequest() come suggerito nei blog che hai elencato.

2

Come probabilmente leggete su quei post che avete citato, con Response.Redirect il trasferimento viene effettuato dal browser mentre con Server.Transfer - è fatto sul server.

Utilizzare Server.Transfer quando si desidera navigare verso pagine che si trovano sullo stesso server e utilizzare Response.Redirect quando si desidera navigare tra pagine che si trovano su server/domini diversi.

Server.Transfer è più veloce poiché c'è un viaggio di andata e ritorno meno - conserva le risorse del server.

Bottom line - dipende dalle vostre esigenze.

1

La risposta breve è fare ciò che dice il primo articolo.

Sebbene tecnicamente corretto, il secondo articolo trascura la soluzione più semplice: evitare di fare un Response.Redirect in Page_Load. Se hai avere per estrarre Response.Redirect in Page_Load, prenda semplicemente il colpo su ThreadAbortException per quella o due istanze piuttosto che scrivere un gruppo di codice stupido in un HttpModule.

In generale, probabilmente non si hanno troppi validi motivi per richiamare Response.Redirect in un Page_Load.

Ad esempio, se si utilizza l'autenticazione basata su form ASP.NET, si prenderà cura di "roba del tipo" non si appartiene a questa pagina di accesso ".

Come nota a margine, se si ha la possibilità di farlo, concentrare l'attenzione sulla tecnologia ASP.NET MVC. Otterrai migliori lavori e meno frustrazione man mano che la tua carriera progredisce.

Problemi correlati