Domanda

Ho avuto qualche errore strano con response.redirect() e il progetto non stava costruendo a tutti .. quando ho rimosso il fermo try- blocco che circondava il blocco di codice in cui è stato Response.Redirect() in ha funzionato normalmente ..

Voglio solo sapere se questo è un problema noto o qualcosa del genere ...

È stato utile?

Soluzione

Se non ricordo male, Response.Redirect() genera un'eccezione per interrompere la richiesta corrente (ThreadAbortedException o qualcosa di simile). Così si potrebbe pescatore di tale eccezione.

Modifica:

KB articolo descrive questo comportamento (anche per la Request.End() e Server.Transfer() metodi ).

Per endResponse=false esiste un sovraccarico:

Response.Redirect(String url, bool endResponse)

Se si passa endResponse=true, quindi l'eccezione non viene gettato (ma il runtime continua l'elaborazione della richiesta corrente).

Se <=> (o se si usa l'altra sovraccarico), viene generata l'eccezione e la richiesta corrente verrà immediatamente interrotta.

Altri suggerimenti

Come sottolinea Martin, Response.Redirect getta una ThreadAbortException. La soluzione è quella di ri-generare l'eccezione:

try  
{
   Response.Redirect(...);
}
catch(ThreadAbortException)
{
   throw; // EDIT: apparently this is not required :-)
}
catch(Exception e)
{
  // Catch other exceptions
}

Martin è corretta, un ThreadAbortException si butta quando si utilizza un Response.Redirect, vedere la kb articolo qui

Si può avere un riferimento variabile che viene dichiarata all'interno del blocco try.

Per esempio, il codice qui sotto non è valido:

try
{
  var b = bool.Parse("Yeah!");
}
catch (Exception ex)
{
  if (b)
  {
    Response.Redirect("somewhere else");
  }
}

Si dovrebbe uscire la dichiarazione b per di fuori del blocco try-catch.

var b = false;
try
{
  b = bool.Parse("Yeah!");
}
catch (Exception ex)
{
  if (b)
  {
    Response.Redirect("somewhere else");
  }
}

Non credo che ci sia alcun problema noto qui.

Semplicemente non si può fare un redirect () all'interno di un blocco try / catch perché Redirect lascia il controllo della corrente ad un altro aspx (per esempio), che lascia il fermo in aria (non può tornare ad esso) .

EDIT: D'altra parte, mi avrebbe potuto avere tutto questo capito indietro. Siamo spiacenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top